home *** CD-ROM | disk | FTP | other *** search
/ Collection of Tools & Utilities / Collection of Tools and Utilities.iso / dbase / snap501.zip / SNAP.DOC < prev    next >
Text File  |  1991-11-09  |  180KB  |  4,940 lines

  1.  
  2.  
  3.  
  4.  
  5.  
  6.  
  7.  
  8.  
  9.  
  10.  
  11.  
  12.  
  13.  
  14.  
  15.  
  16.  
  17.  
  18.  
  19.                                         SNAP!
  20.                                      Version 5.0
  21.                          Documentation and Development System
  22.                              for FoxPro, dBASE, Clipper,
  23.                                and Other X-Base Systems
  24.  
  25.  
  26.                        Written by Walter J. Kennamer 74025,514
  27.  
  28.  
  29.  
  30.                                 ┌─────────┐                  
  31.                           ┌─────┴───┐     │              (tm)
  32.                         ──│         │o    │──────────────────
  33.                           │   ┌─────┴╨──┐ │  Association of  
  34.                           │   │         │─┘  Shareware       
  35.                           └───│    o    │    Professionals   
  36.                         ──────│    ║    │────────────────────
  37.                               └────╨────┘    MEMBER          
  38.  
  39.  
  40.  
  41.                                        License
  42.  
  43.      Copyright (c) 1991 Walter J. Kennamer. All Rights Reserved.
  44.  
  45.      You are free to use, copy and distribute SNAP! providing that:
  46.  
  47.           NO FEE IS CHARGED FOR USE, COPYING OR DISTRIBUTION.
  48.  
  49.           IT IS NOT MODIFIED IN ANY WAY.
  50.  
  51.           THIS DOCUMENTATION FILE (UNMODIFIED) ACCOMPANIES ALL COPIES.
  52.  
  53.      This program is provided AS IS without any warranty, expressed or implied,
  54.      including but not limited to fitness for a particular purpose.
  55.  
  56.      dBASE II, dBASE III, dBASE IV are trademarks of Ashton-Tate. Clipper is a
  57.      trademark of Nantucket Software.  FoxBASE, FoxBASE+ and FoxPro are
  58.      trademarks of Fox Holdings, Inc.  UNIX is a trademark of AT&T.  Other
  59.      trademarks are the properties of their respective holders.
  60.  
  61.  
  62.  
  63.  
  64.  
  65.  
  66.  
  67.  
  68.                              Table of Contents
  69.  
  70.      Overview  . . . . . . . . . . . . . . . . . . . . . . . . . .   4
  71.           X-Base Dialects  . . . . . . . . . . . . . . . . . . . .   5
  72.           Registration Fee . . . . . . . . . . . . . . . . . . . .   6
  73.  
  74.      Getting Started . . . . . . . . . . . . . . . . . . . . . . .   7
  75.           Basic Operation  . . . . . . . . . . . . . . . . . . . .   7
  76.           A Tour of the SNAP! Screens  . . . . . . . . . . . . . .   8
  77.           Author and Copyright Holder  . . . . . . . . . . . . . .   8
  78.           Paths  . . . . . . . . . . . . . . . . . . . . . . . . .   8
  79.           Saving and Restoring Default Choices . . . . . . . . . .   9
  80.           Abbreviations  . . . . . . . . . . . . . . . . . . . .    10
  81.           Status Reports . . . . . . . . . . . . . . . . . . . .    10
  82.           Searching the Program Tree . . . . . . . . . . . . . .    11
  83.           dBASE Version? . . . . . . . . . . . . . . . . . . . .    11
  84.           Ignoring Drive Designations  . . . . . . . . . . . . .    11
  85.           Printing SNAP! Documentation . . . . . . . . . . . . .    12
  86.           Using a Mouse  . . . . . . . . . . . . . . . . . . . .    13
  87.  
  88.      SNAP! Commands  . . . . . . . . . . . . . . . . . . . . . .    14
  89.           Macros . . . . . . . . . . . . . . . . . . . . . . . .    14
  90.           Indirect References  . . . . . . . . . . . . . . . . .    15
  91.           SNAPCODE--Fake Program Statements  . . . . . . . . . .    16
  92.           Multiple Program and Data Directories  . . . . . . . .    17
  93.           Program Narratives . . . . . . . . . . . . . . . . . .    17
  94.           Other SNAP! Directives . . . . . . . . . . . . . . . .    17
  95.  
  96.      Source Code Formatting Options  . . . . . . . . . . . . . .    19
  97.           File Headings  . . . . . . . . . . . . . . . . . . . .    19
  98.           Indentation  . . . . . . . . . . . . . . . . . . . . .    20
  99.           Capitalization . . . . . . . . . . . . . . . . . . . .    21
  100.           Key Word Expansion and Compression . . . . . . . . . .    22
  101.           Suppressing Blank Lines and Comments . . . . . . . . .    22
  102.           Key Words File . . . . . . . . . . . . . . . . . . . .    23
  103.  
  104.      Reports and Outputs . . . . . . . . . . . . . . . . . . . .    26
  105.           Controlling the Printer  . . . . . . . . . . . . . . .    26
  106.           Tree Structure Diagram . . . . . . . . . . . . . . . .    26
  107.           File List  . . . . . . . . . . . . . . . . . . . . . .    28
  108.           Database Summary . . . . . . . . . . . . . . . . . . .    28
  109.           Index File Summary . . . . . . . . . . . . . . . . . .    29
  110.           Format File Summary  . . . . . . . . . . . . . . . . .    30
  111.           Report Form Summary  . . . . . . . . . . . . . . . . .    30
  112.           Label Form Summary . . . . . . . . . . . . . . . . . .    31
  113.           Procedure File Summary . . . . . . . . . . . . . . . .    31
  114.           Other Summary Reports  . . . . . . . . . . . . . . . .    31
  115.           Variable Cross-Reference Report  . . . . . . . . . . .    32
  116.           LNK and MAKE files . . . . . . . . . . . . . . . . . .    35
  117.           Batch Files  . . . . . . . . . . . . . . . . . . . . .    36
  118.           Action Diagrams  . . . . . . . . . . . . . . . . . . .    37
  119.  
  120.                                      2
  121.  
  122.  
  123.  
  124.  
  125.  
  126.  
  127.  
  128.           Source Code Printout . . . . . . . . . . . . . . . . .    40
  129.           Printing Without Documenting (Reprinting)  . . . . . .    42
  130.  
  131.      Using SNAP! in a Batch Environment  . . . . . . . . . . . .    43
  132.  
  133.      Random Notes  . . . . . . . . . . . . . . . . . . . . . . .    44
  134.  
  135.      Program Limitations . . . . . . . . . . . . . . . . . . . .    45
  136.           Legal Coding that is Prohibited by SNAP! . . . . . . .    45
  137.           Hyphens in Filenames . . . . . . . . . . . . . . . . .    46
  138.           Multiple Procedure Files . . . . . . . . . . . . . . .    46
  139.           Suppressing Color  . . . . . . . . . . . . . . . . . .    46
  140.  
  141.      Change History  . . . . . . . . . . . . . . . . . . . . . .    47
  142.  
  143.      Administrative Matters  . . . . . . . . . . . . . . . . . .    51
  144.           Version Numbers  . . . . . . . . . . . . . . . . . . .    51
  145.           Updates and New Versions . . . . . . . . . . . . . . .    51
  146.           How to Get Support . . . . . . . . . . . . . . . . . .    51
  147.           Association of Shareware Professionals . . . . . . . .    52
  148.  
  149.      Acknowledgements  . . . . . . . . . . . . . . . . . . . . .    53
  150.  
  151.      Appendix A -- Sample Reports  . . . . . . . . . . . . . . .    54
  152.  
  153.      Index . . . . . . . . . . . . . . . . . . . . . . . . . . .    78
  154.  
  155.  
  156.  
  157.  
  158.  
  159.  
  160.  
  161.  
  162.  
  163.  
  164.  
  165.  
  166.  
  167.  
  168.  
  169.  
  170.  
  171.  
  172.  
  173.  
  174.  
  175.  
  176.  
  177.  
  178.  
  179.  
  180.  
  181.                                      3
  182.  
  183.  
  184.  
  185.  
  186.  
  187.  
  188.  
  189.  
  190.  
  191.  
  192.                                        Overview
  193.  
  194.      (A short note to the faithful: those of you who have used SNAP! before may
  195.      wish to turn directly to the Change History where new features in version
  196.      5.0 are summarized.)
  197.  
  198.      SNAP! makes documenting X-Base programs a snap.  SNAP! is designed to
  199.      produce technical documentation for an entire X-Base system.  Its reports
  200.      include:
  201.  
  202.           Formatted source code listings
  203.           System summary showing lines of code, file statistics, etc. 
  204.           Variable cross-reference report
  205.           Tree structure of the system.  The tree optionally can also show
  206.           databases, index files, etc. used by each program. 
  207.           List of all files in the system, plus a source reprint file
  208.           Database summary
  209.           Index file summary (including multiple index files)
  210.           Format file summary
  211.           Label form summary
  212.           Report form summary
  213.           Procedure/function file summary
  214.           BIN file summary
  215.           Memory file summary
  216.           Other files summary
  217.           Action diagrams
  218.           Batch files to back up programs, databases, etc. 
  219.           Batch file to move SNAP! output files back to the source subdirectory
  220.           For FoxPro 2.0 applications:
  221.                Screen file summary
  222.                Menu file summary
  223.           For Clipper applications:
  224.                Link files (PLINK86, TLINK, MS-LINK)
  225.                Make files
  226.  
  227.      In addition, on each program file, SNAP! can write a heading showing:
  228.  
  229.           Program name
  230.           System name
  231.           Author and copyright notice
  232.           Which programs, procedures and functions call this program
  233.           Which programs, procedures and functions this program calls
  234.           Databases used
  235.           Index files used
  236.           Formats used
  237.           Report forms used
  238.           Procedures
  239.           BIN files called or loaded
  240.           Memory files used
  241.  
  242.                                           4
  243.  
  244.  
  245.  
  246.  
  247.  
  248.  
  249.  
  250.           Other files used (text files, misc. files, and the like)
  251.           Date and time last modified
  252.  
  253.      If you wish, all source code headings can also be echoed to a separate
  254.      file.  Additionally, SNAP! can indent your source code and capitalize key
  255.      words to make your code easier to read, understand and maintain.
  256.  
  257.      Unlike many other X-Base documentation systems, SNAP! documentation is
  258.      system-wide.  In other words, not only can it tell you where variable X was
  259.      used in a particular program, it can cross-reference all occurrences of
  260.      variable X anywhere in the program system you are documenting.  You merely
  261.      enter the "top" program file name, and SNAP! does the rest.  Of course, you
  262.      may also document a single program if you wish.
  263.  
  264.  
  265.      X-Base Dialects
  266.  
  267.      SNAP! fully supports the following dialects of the X-Base language:
  268.           dBASE II
  269.           dBASE III
  270.           dBASE III+
  271.           dBASE IV 1.0
  272.  
  273.           FoxBASE
  274.           FoxBASE+ 2.1
  275.           FoxPro 1.0
  276.           FoxPro 2.0
  277.  
  278.           Clipper (releases through Summer '87)
  279.  
  280.      SNAP! provides limited support for Clipper 5.01.  Unfortunately, Clipper
  281.      has diverged too much from other X-Base dialects to make full support
  282.      practical.  My goal was to make SNAP! work as well as possible with Clipper
  283.      5.0 applications, and at least not break anything.  The following are 
  284.      supported:
  285.           STATIC functions (e.g., STATIC FUNCTION foo).
  286.           In-line function declarations (e.g., FUNCTION foo(params...) ).
  287.           Clipper 5.0 key words.
  288.           // comment marks.
  289.           /* */ comments, so long as they are at the beginning of a line, or
  290.                both the comment begin (/*) and comment end (*/) are on the same
  291.                line.
  292.           #include and #define directives (basically, #define is treated like a
  293.                SNAP! macro substitution.  Mixed case is recognized and
  294.                supported.).
  295.  
  296.      There are some Clipper 5.x features that are not supported.  These are
  297.      mainly areas where Clipper departs from the X-Base standard in some way
  298.      that was impossible to deal with in SNAP!.  Among the unsupported features
  299.      are:
  300.           1)   Code blocks.
  301.  
  302.  
  303.                                           5
  304.  
  305.  
  306.  
  307.  
  308.  
  309.  
  310.  
  311.           2)   Preprocessor directives other than #include and #define.  These
  312.                are ignored.
  313.           3)   Multiple commands per line, which can confuse SNAP! if the first
  314.                one is a control structure.  For example, something like the
  315.                following will trigger control structure errors:
  316.                DO CASE;CASE foo=bar;? "Hello";CASE baz=plugh;? "Goodbye";ENDCASE
  317.                SNAP! sees the first "DO CASE" and cannot find a terminating
  318.                "ENDCASE."  The action diagrams will also be messed up.
  319.           4)   There are almost certainly others as well.
  320.  
  321.      In addition, SNAP! generally handles Force, dbXL, Quicksilver and VP-INFO
  322.      programs pretty well.  However, I do not guarantee that it fully supports
  323.      all features of these products.
  324.  
  325.       
  326.      Registration Fee
  327.  
  328.      There isn't one.  SNAP! can be copied and distributed freely, as long as it
  329.      is unchanged and you include this document file unmodified.  I encourage
  330.      you to give copies to your friends and co-workers, to upload them to
  331.      bulletin boards, and to leave them in bus stations.
  332.  
  333.  
  334.  
  335.  
  336.  
  337.  
  338.  
  339.  
  340.  
  341.  
  342.  
  343.  
  344.  
  345.  
  346.  
  347.  
  348.  
  349.  
  350.  
  351.  
  352.  
  353.  
  354.  
  355.  
  356.  
  357.  
  358.  
  359.  
  360.  
  361.  
  362.  
  363.  
  364.                                           6
  365.  
  366.  
  367.  
  368.  
  369.  
  370.  
  371.  
  372.  
  373.                                    Getting Started
  374.  
  375.      First, make a backup copy of your program files.  I have tried to test
  376.      SNAP! on a variety of hardware and software combinations, and there
  377.      shouldn't be any danger, but I would feel awful if anyone lost program
  378.      files due to some curious combination of resident programs, unusual
  379.      equipment and sunspot activity, not to mention (gasp!) "features."  SNAP!
  380.      has been around for several years now and nobody has reported that SNAP!
  381.      has ever corrupted source code, but I would hate for you to be the first.
  382.  
  383.  
  384.      Basic Operation
  385.  
  386.      SNAP! is very easy to use.  If you accept the program's default options,
  387.      you only have to enter the following information on the TopFile screen:
  388.  
  389.           "Top" file name
  390.           System name
  391.           Author and copyright information
  392.           Paths for program, data, output and SNAP! files
  393.  
  394.      If you are happy with the defaults, just enter the information on the first
  395.      screen (the System screen), press F10 to see the main menu, then press 'B'
  396.      to begin documenting your system.
  397.  
  398.      The term "Top File" (spelled and punctuated in a variety of ways) is used
  399.      throughout this documentation to mean the first file in a system--the one
  400.      first invoked.
  401.  
  402.      You can press F10 to see the main menu.  Its choices largely correspond to
  403.      various option screens.  For example, you set report options on the Reports
  404.      Screen and there is a "Reports" choice on the main menu.
  405.  
  406.      If you don't want to use the menu, you can save a keystroke or two by using
  407.      the Alt key in combination with the menu choice you want.  For example,
  408.      without pressing F10 to pop up the menu, you can press Alt-R to see the
  409.      Reports Screen, Alt-B to Begin Documenting, Alt-Q to quit and so forth. 
  410.      Also, the Ctrl-PgUp and Ctrl-PgDn keys take you to the preceding and
  411.      succeeding screens respectively.
  412.  
  413.      The line at the bottom of the screen tells you which function keys are
  414.      active.  You can access these functions by pressing the function key or by
  415.      pointing at the description on the bottom of the screen with a mouse.  At
  416.      any point, you can press the F1 key to receive context-sensitive help. 
  417.      Help is available for each field.
  418.  
  419.      The SNAP! system is composed of the following files:
  420.           SNAP.EXE     -- main program file
  421.           SNAP.HLP     -- help file
  422.           SNAP.DOC     -- this documentation file
  423.           DB2WORDS.SNP -- key word file for dBASE II/FoxBASE 
  424.  
  425.                                           7
  426.  
  427.  
  428.  
  429.  
  430.  
  431.  
  432.  
  433.           DB3WORDS.SNP -- key word file for
  434.                          dBASE III/Clipper/FoxBASE+
  435.           DB4WORDS.SNP -- key word file for dBASE IV/FoxPro
  436.           SNAPPRT.SNP  -- printer definitions
  437.           filename.KEY -- key word files for third-party libraries
  438.  
  439.      All of these files must be in the same subdirectory, which may be different
  440.      than the subdirectory in which your dBASE source code files are stored.
  441.  
  442.  
  443.      A Tour of the SNAP! Screens
  444.  
  445.      SNAP! has seven main screens on which you can select various combinations
  446.      of options:
  447.           System:   Contains system-level information (system name, author, top
  448.                     file name, etc.).
  449.           Report:   Determines which documentation reports will be generated.
  450.           Format:   Determines source code formatting and action diagram options
  451.                     in effect.
  452.           Xref:     Determines what kinds of words will be in the cross-
  453.                     reference.
  454.           Headings: Determines what goes in a program heading.
  455.           Tree:     Determines what kinds of files will be shown on the tree
  456.                     diagram.
  457.           Print:    Determines source code printing parameters.
  458.           Other:    Other options.
  459.  
  460.      The next sections highlight a few of the fields that may have hidden
  461.      mysteries.
  462.  
  463.  
  464.      Author and Copyright Holder
  465.  
  466.      Enter the author and copyright holder in these fields.  This information is
  467.      used only in the program headings, and may be omitted if you choose not to
  468.      write program headings (you make that choice on the Format screen).  If you
  469.      enter either author or holder, but not both, SNAP! assumes that they are
  470.      the same.  The copyright date field is large enough to hold dates like
  471.      "1990-1991."
  472.  
  473.  
  474.      Paths
  475.  
  476.      The TopFile menu screen has four fields for path information--the path to
  477.      the source code, data, output and SNAP! files.  Your response should be a
  478.      valid MS-DOS path, with or without drive designation.  It doesn't matter if
  479.      you omit the final backslash (e.g., C:\SNAP is valid, as is C:\SNAP\ or
  480.      \SNAP).
  481.  
  482.      If the TopFile you specify cannot be found, or if the SNAP! files are not
  483.      where you say they are, SNAP! complains and will not let you begin
  484.  
  485.  
  486.                                           8
  487.  
  488.  
  489.  
  490.  
  491.  
  492.  
  493.  
  494.      documentation.  If the output directory does not exist, SNAP! will create
  495.      it.  If this is a FoxPro 2.0 system, TopFile can be a project.
  496.  
  497.      If your input and output paths are different, SNAP! will not modify your
  498.      original source code files in any way.  Only the output files will contain
  499.      capitalized key words, indents, headings and so on.
  500.  
  501.      On the other hand, if the source code and output paths are the same, SNAP!
  502.      adds .BAK extensions to your original input files and creates modified
  503.      output files with the original names.  For example, if one of your input
  504.      programs was named EDIT.PRG, after running SNAP! it will be called EDIT.BAK
  505.      and a new, modified EDIT.PRG will be in the directory.  This scheme works
  506.      fine as long as all your input files have unique names (not counting the
  507.      extension).  Otherwise, all but the last non-unique input file will be lost
  508.      (though the modified output files will still be there).  The best idea is
  509.      never to direct output to the input directory if the first eight characters
  510.      of all of your program files are not unique.
  511.  
  512.      See the section below on "Multiple Directories" for information about how
  513.      to define more than one data and program directory to SNAP!.  Note that
  514.      SNAP! pays no attention to "SET PATH TO" statements.  SNAP! also cannot
  515.      handle macro substitutions for drives or paths.
  516.  
  517.      SNAP! never modifies database, index, report form, label form, memory files
  518.      or binary files.
  519.  
  520.      When SNAP! decides you are about to do something particularly dangerous, it
  521.      may require you to direct output files to a different directory than the
  522.      input files are in.  Some "dangerous" options include expanding or
  523.      compressing key words and eliminating comments from source code.
  524.  
  525.  
  526.      Saving and Restoring Default Choices
  527.  
  528.      As you use SNAP!, you may wish to modify the default values for certain
  529.      fields.  For example, you may want to set the SNAP! path to \SNAP, or the
  530.      author and copyright holder to your name.  Press F5 to save the current
  531.      values of each field.  SNAP! will prompt you for a filename to use for the
  532.      configuration file.
  533.  
  534.      When you start SNAP!, you can specify the file to use for default values by
  535.      using the /F switch on the command line.  For example, the command:
  536.           SNAP /fc:\foo\bar.baz  (note: no space between '/f' and the filename).
  537.      tells SNAP! to look for a configuration file named 'bar.baz' in the '\foo'
  538.      subdirectory on drive c:.  If it cannot find it, SNAP! will start with
  539.      default values.  When you save the configuration, SNAP! uses the name you
  540.      specified.  If you do not specify a file, SNAP! looks for one called
  541.      CONFIG.SNP in the current directory. If the file you specify does not have
  542.      an extension, SNAP! assumes the extension is '.SNP'.  So the order for
  543.      establishing defaults is:
  544.           1.  A configuration file you specify on the command line
  545.           2.  CONFIG.SNP in the current subdirectory
  546.  
  547.                                           9
  548.  
  549.  
  550.  
  551.  
  552.  
  553.  
  554.  
  555.           3.  SNAP! factory default values
  556.  
  557.      I ordinarily save a separate configuration file for each system I use in
  558.      the same subdirectory with the system.  This is a big help for running
  559.      SNAP! in batch mode (see below) and for keeping subdirectories, filenames,
  560.      etc. straight.
  561.  
  562.      You can also press F6 to retrieve saved specifications.  Invoking SNAP!
  563.      with the /F command-line parameter is equivalent to entering the program,
  564.      pressing F6 at the System screen and entering a filename.
  565.  
  566.  
  567.      Abbreviations
  568.  
  569.      In general, SNAP! is pretty good about recognizing valid X-Base
  570.      abbreviations.  For example, it will properly detect that
  571.           <tab>DO <tab> WHIL<tab>
  572.      initiates a DO loop.  Version 3.00 also removed the earlier restriction on
  573.      abbreviating INDEX ('SET INDE TO foo' is fine now).
  574.  
  575.      Also, if you use X-Base key words as variable names, SNAP! can sometimes
  576.      become confused.  For example, if you use 'PROC' as a variable name within
  577.      a procedure file and put the statement 'PROC = FOO' within the file, SNAP!
  578.      will see the 'PROC' and think that it is initiating a new procedure. 
  579.      Common sense will ordinarily avoid this problem.  As always, it is a good
  580.      idea not to use key words in a way other than that intended by the
  581.      language, especially if you plan to compile the code; compilers tend to be
  582.      more picky about this restriction than interpreters.
  583.  
  584.  
  585.      Status Reports
  586.  
  587.      As SNAP! documents your programs, it updates a status screen that tells you
  588.      how much progress it has made.  The screen shows the file that SNAP! is
  589.      currently documenting and the number of lines in the file.  SNAP! makes two
  590.      passes through each file--one to determine which files use or call which
  591.      other files, and one for cross-referencing variables, formatting source
  592.      code and preparing action diagrams.
  593.  
  594.      In addition, if you choose any option that modifies source code (headings,
  595.      indentation, key word capitalization, compression or expansion, etc.), or
  596.      if you choose to display the cross-reference report, SNAP! will display a
  597.      more elaborate screen indicating how many programs (actually, programs,
  598.      procedures, functions, etc.), databases, indexes, format files, report
  599.      forms and variables it has found, along with the total number of program
  600.      lines documented so far, and the amount of free memory available. This
  601.      screen also shows the elapsed time since you began documentation.
  602.  
  603.      Note: some people have reported that the elapsed time is occasionally
  604.      negative.  This is normal.  It means that your computer is actually running
  605.      faster than light.  It is nothing to be concerned about unless you have an
  606.      8087 chip, which sometimes overheats when moving backwards in time.
  607.  
  608.                                           10
  609.  
  610.  
  611.  
  612.  
  613.  
  614.  
  615.  
  616.      If SNAP! identifies any errors during its run, it will print a brief error
  617.      message in a separate window in the upper right corner of the screen.  All
  618.      error messages are also echoed to the ERROR.DOC file.
  619.  
  620.  
  621.      Searching the Program Tree
  622.  
  623.      SNAP! assumes that you want to document not only the TopFile, but all
  624.      programs it calls, all programs called by programs that Top calls, and so
  625.      on.  In fact, SNAP! will search the program tree for all programs,
  626.      databases, index files, report forms, format files, label forms, memory
  627.      files, etc. as it prepares system documentation.  You never need to specify
  628.      more than the top program file name.
  629.  
  630.      If you choose not to search the tree (you can make this choice on the Other
  631.      Options Screen), only the specific file you enter will be documented. 
  632.      Thus, you can limit documentation to a particular file or a branch of the
  633.      program tree by varying either the file you input as Top or the search tree
  634.      parameter.
  635.  
  636.      Note that SNAP! does not track "SET DEFAULT TO x" statements, but always
  637.      expects to see files with no drive designations on the default drive and in
  638.      the source file subdirectory.
  639.  
  640.  
  641.      dBASE Version?
  642.  
  643.      On the Other Options screen, SNAP! asks which version of X-Base you are
  644.      using.  You should answer "4" if this is a dBASE IV or FoxPro system, or
  645.      "3" if this is dBASE III or a dBASE III "compatible" -- specifically
  646.      Clipper, FoxBASE+, or QuickSilver.  Answer "2" for dBASE II or FoxBASE
  647.      (original, dBASE II variety).
  648.  
  649.      SNAP! needs this information since different versions of X-Base use
  650.      different internal format for database and index files, as well as
  651.      different key words.  SNAP! reads Clipper index files, and handles Clipper
  652.      source code and databases without difficulty. If a specified dBASE III
  653.      index file is not found, SNAP! automatically searches for the corresponding
  654.      Clipper index file (with an NTX extension). SNAP! will also automatically
  655.      detect FoxBASE and FoxPro index files (IDX or CDX extensions) and document
  656.      them properly.
  657.  
  658.      Further, if you say that your system is a dBASE IV-type system, SNAP!
  659.      assumes that report form files are in dBASE IV or FoxPro format.  If they
  660.      are not, the system can hang when SNAP! bravely tries to read data that
  661.      isn't there.
  662.  
  663.  
  664.      Ignoring Drive Designations
  665.  
  666.      Sometimes you may want SNAP! to disregard explicit drive and path
  667.      designations when searching for data files.  A choice on the Other Options
  668.  
  669.                                           11
  670.  
  671.  
  672.  
  673.  
  674.  
  675.  
  676.  
  677.      screen instructs SNAP! to drop any drive or path designations before
  678.      attempting to find a file.  As an example, you may have written a backup
  679.      routine to copy a database to B:BACKUP.DBF.  If you would like SNAP! not to
  680.      try to find that file on the B: drive, choose the option to ignore drive
  681.      designations.  This option has no effect on SNAP!'s search for program
  682.      files.
  683.  
  684.  
  685.      Printing SNAP! Documentation
  686.  
  687.      SNAP! often produces a lot of documentation--perhaps more than you will
  688.      care to print.  It is not uncommon for SNAP! to produce several hundred
  689.      pages of documentation for a X-Base system of modest size.  It could take
  690.      days to print it all out on anything but a laser printer.
  691.  
  692.      You can print SNAP! documentation directly from SNAP!, with full control
  693.      over page margins, printer codes and so forth.  Set up your printer options
  694.      on the print options screen.  Hint: Press F2 while you are there and see if
  695.      a set of default options for your printer already exists.  
  696.  
  697.      By default, SNAP! sends its printed output to LPT1:.  This is usually where
  698.      your printer is, but if it isn't, or if you would like to send the printed
  699.      output to a file, use the -P command line switch, like this:
  700.           SNAP -pCOM2:
  701.      or
  702.           SNAP -p\foo\bar\output.txt
  703.      If you use the optional "NET" keyword:
  704.           SNAP -pLPT2:(NET)
  705.      you can tell SNAP! that your printer port (LPT2 in this example) is talking
  706.      to a network printer and that SNAP! should be a little more forgiving about
  707.      timeout warnings.
  708.  
  709.      Having said all that, I practically never print the documentation, but
  710.      review it on the screen instead.  However, if you decide to print the SNAP!
  711.      documentation files, you have several options.  First, you can simply copy
  712.      them to the printer like this:
  713.           COPY *.DOC PRN:
  714.  
  715.      A second option is to add the documentation files to the REPRINT.DOC file
  716.      (you have to add them with an editor--SNAP! doesn't do it automatically)
  717.      and use the "immediate print" capabilities of SNAP! (Press "F9--Print Now"
  718.      from the Print Options Screen) to print them.
  719.  
  720.      Alternatively, you can use a program such as the LP program in Norton
  721.      Utilities to print the files.  LP (it may be called LINEPRNT on your
  722.      system) prints the files with nice headings and page numbers.
  723.  
  724.      If you have a laser printer, I recommend that you take a look at a
  725.      Shareware program from Korenthal Associates called 4PRINT.  It prints four
  726.      pages of text on each physical piece of paper and can greatly reduce the
  727.      volume of printed SNAP! documentation.  
  728.  
  729.  
  730.                                           12
  731.  
  732.  
  733.  
  734.  
  735.  
  736.  
  737.  
  738.      I have gotten permission from Korenthal Associates to distribute 4PRINT on
  739.      the SNAP! distribution disk.  If you have an HP laser printer, I encourage
  740.      you to try 4PRINT.  If you use it and like it, please register it directly
  741.      to Korenthal Associates at 230 West 13th Street, New York, New York 10011. 
  742.      Telephone: (212) 242-1790.  It is also available on many bulletin board
  743.      systems.  The registration fee for the full package with printed
  744.      documentation is about $40.  Highly recommended.  When you register, please
  745.      jot a note on the form or tell them on the phone that you heard about it
  746.      through SNAP!.
  747.  
  748.      You can also run SNAP!, create documentation and formatted source code
  749.      files, then later restart SNAP! and print the source code.  Whenever you
  750.      choose to create a list of files used in the system (FILELIST.DOC), SNAP!
  751.      also creates the REPRINT.DOC file that can be used to reprint all SNAP!
  752.      source code and action diagram files.  Using the "F9--Print Now" function
  753.      on the print options screen, you can tell SNAP! to print everything listed
  754.      in REPRINT.DOC.  Should you decide to print any files in addition to source
  755.      code and action diagrams, you can add their names to REPRINT.DOC.
  756.  
  757.      In addition to REPRINT.DOC, which holds the names of source code files,
  758.      SNAP! creates DOCLIST.DOC, which holds the names of documentation files. 
  759.      Should you wish to, you can use the "F9--Print Now" option to print SNAP!
  760.      documentation files.  Even so, I recommend 4PRINT instead (see above).
  761.  
  762.  
  763.      Using a Mouse
  764.  
  765.      SNAP! is mouse friendly.  You can use the mouse to position the cursor in
  766.      data entry fields, select function keys and navigate the help system.  To
  767.      select one of the function keys with the mouse, point at the function key
  768.      definition on the bottom of the screen. 
  769.  
  770.      In general, pressing the left button is like pressing the enter key and
  771.      pressing the right button is like pressing escape.  For example, pressing
  772.      the right button from a data entry screen calls the main menu, just as if
  773.      you had pressed escape.
  774.  
  775.      There are a couple of wrinkles to using the mouse inside the help system. 
  776.      Press the right mouse button to exit help.  If there is more than one
  777.      screen of help, you can click on the arrow on the right side to scroll the
  778.      page.  While help is active, you cannot move the mouse pointer outside the
  779.      help window.
  780.  
  781.  
  782.  
  783.  
  784.  
  785.  
  786.  
  787.  
  788.  
  789.  
  790.  
  791.                                           13
  792.  
  793.  
  794.  
  795.  
  796.  
  797.  
  798.  
  799.                                     SNAP! Commands
  800.  
  801.      SNAP! supports several commands that you can insert in your source code
  802.      files.  These commands will look like comments to X-Base systems, but will
  803.      have a special meaning for SNAP!.  The commands allow you to define macros,
  804.      insert imaginary program statements into your system, turn SNAP! features
  805.      on and off for particular parts of your system, and so forth.
  806.  
  807.      Macros
  808.  
  809.      SNAP! has a limited ability to do macro substitutions.  To define a macro,
  810.      place the following line in your source code:
  811.  
  812.           *# SNAPMACRO  source  target1 target2 . . .
  813.  
  814.      Alternatively, or in conjunction with this method, you can also define
  815.      macro substitutions in a separate file.  Specify the /mfilename switch on
  816.      the command line to tell SNAP! which file the substitution strings are in. 
  817.      For example, the following command will start SNAP! and read macro
  818.      definitions from the file FOO.MAC:
  819.  
  820.           SNAP /mFOO.MAC
  821.  
  822.      If you do not specify a filename with the /m switch, SNAP! will try to find
  823.      MACRO.SNP. You must use the full "*# SNAPMACRO" command verb on each line
  824.      of the file.  Macro substitutions defined in source code files take
  825.      precedence over those defined in a separate macro file.
  826.  
  827.      The /O switch on the SNAP! command line disables all macro processing, both
  828.      from SNAPMACRO statements in source code and in a named macro file.
  829.  
  830.      Note that the SNAPMACRO statement begins with an asterisk and a pound sign.
  831.      SNAP! uses this sequence of characters to designate a SNAP! command (see
  832.      the /T command line switch for information on how to change these
  833.      characters). 'Source' must be a single word, delimited by spaces or tabs. 
  834.      "Target" means the rest of the line.  Everything on the line--both source
  835.      and target--will be converted to upper case.
  836.  
  837.      Note that the source string does not include the ampersand (&) symbol for
  838.      the macro (e.g., use SOURCE instead of &SOURCE).  The rest of the line
  839.      (minus leading and trailing blanks) will be used as a substitution string. 
  840.      The target can be a single word or several words.
  841.  
  842.      You cannot use && comments on a SNAPMACRO line since SNAP! will think they
  843.      are part of the target.  If you want to document the purpose of the
  844.      SNAPMACRO statement, put a comment on the line above it.
  845.  
  846.      The SNAPMACRO statement can appear anywhere, as long as SNAP! sees it
  847.      before encountering the macro that you want to replace. If the target will
  848.      have the same value throughout the system (e.g., FOO will always be
  849.      replaced by BAR), it is a good idea to put all of the macros in one place,
  850.      perhaps at the top of the TopFile or in a separate macro file.
  851.  
  852.                                           14
  853.  
  854.  
  855.  
  856.  
  857.  
  858.  
  859.  
  860.      If you would like SNAP! to use different macro values during documentation,
  861.      you may want to place the SNAPMACRO statement immediately before the
  862.      specific location of each macro substitution.  If you have multiple
  863.      definitions for a single macro, only the last one SNAP! sees will be
  864.      effective.  For example, if the following series of statements are in your
  865.      program,
  866.  
  867.           *# SNAPMACRO s_ddndx  target1
  868.           *# SNAPMACRO s_ddndx  target2
  869.           *# SNAPMACRO s_ddndx  target3
  870.  
  871.      only 'target3' will be effective and will be substituted for each
  872.      occurrence of &s_ddndx.  See also the discussion of SNAPCODE statements
  873.      below for an alternative approach.
  874.  
  875.      SNAP! will try to remove macros that look like drive or path designations. 
  876.      For example, if the following statement is in one of your programs:
  877.  
  878.           USE &MPATH.DATABASE
  879.  
  880.      SNAP! will detect the macro and remove it before trying to find
  881.      DATABASE.DBF.  One consequence of this limit is that you cannot use macros
  882.      to refer to program files in different directories. All source code program
  883.      files (programs, format files, memory files, etc.) must reside in the
  884.      single program directory you specify in the System screen.  Databases and
  885.      indexes can be in either the program or data directories you specify.
  886.  
  887.      SNAP! will not substitute the macro in the code itself, but will use the
  888.      substitution value everywhere else.  For example, assume your program uses
  889.      a database whose name is contained in a macro variable named 'dataname'. 
  890.      Assume further that you have included the following line in your code:
  891.  
  892.           *# SNAPMACRO dataname ABC.DBF
  893.  
  894.      If your code has this line in it:
  895.  
  896.           USE &dataname
  897.  
  898.      the source code will be unchanged after running SNAP!, but the program
  899.      headings and all other SNAP! reports will show this program using the
  900.      ABC.DBF database.
  901.  
  902.      See also the section below "Fake Program Statements--SNAPCODE" for other
  903.      ideas on how to document macros.
  904.  
  905.  
  906.      Indirect References
  907.  
  908.      In many circumstances, FoxPro and Clipper allow you to specify filenames
  909.      and other strings as indirect references.  For example, the following code
  910.      is valid in Clipper Summer 87:
  911.         foo = 'FILENAME'
  912.  
  913.                                           15
  914.  
  915.  
  916.  
  917.  
  918.  
  919.  
  920.  
  921.         bar = '.TXT'
  922.         SET PRINTER TO (foo+bar)
  923.      This is equivalent to the statement:
  924.         SET PRINTER TO filename.txt
  925.  
  926.      SNAP! partially supports indirect references.  When SNAP! sees one, it
  927.      tries to apply macro substitution to the indirect reference.  Therefore,
  928.      the following code will document properly:
  929.         *# SNAPMACRO foo dbfname
  930.         USE (foo)
  931.      SNAP! will pick up the reference to the "dbfname" database.  However, more
  932.      complicated indirect references will usually not be picked up correctly. 
  933.      For example, SNAP! will not be able to figure out what is going on in the
  934.      following code:
  935.         dirname = 'CLIPPER'
  936.         USE ('C:\'+ALLTRIM(dirname)+'\filename')
  937.      When SNAP! encounters such an indirect reference, it does not include it in
  938.      the documentation.  This limitation only applies to FoxPro and Clipper
  939.      systems, and only when you use indirect references.  You can use SNAPCODE
  940.      (see below) to force this database to be documented.
  941.  
  942.  
  943.      SNAPCODE--Fake Program Statements
  944.  
  945.      Sometimes you may want to enter fake program source code statements --
  946.      statements that SNAP! treats as real but which do not actually interfere
  947.      with your program when it executes.  A good example is a macro that calls
  948.      one of a number of programs, depending on the value it has at run time
  949.      (e.g., DO &program). The macro substitution discussed in the section above
  950.      provides a way for you to specify one value for 'program'.  But suppose you
  951.      wanted SNAP! to assume that 'program' had several values and to document
  952.      each one in turn?  The *# SNAPCODE directive provides a way.
  953.  
  954.      The *# SNAPCODE directive causes SNAP! to treat any text on the line as if
  955.      it were a program source code statement.  In the example above, you could
  956.      enter the following lines where the macro was called:
  957.  
  958.           DO &program                    <---- in original program *# SNAPCODE
  959.           DO foo
  960.           *# SNAPCODE DO bar
  961.           *# SNAPCODE DO brlfq
  962.  
  963.      SNAP! acts as if these were perfectly straightforward calls to 'foo', 'bar'
  964.      and 'brlfq', and documents them accordingly.  dBASE and related systems
  965.      ignore the statements.
  966.  
  967.      Note that SNAP! does not know that these SNAPCODE statements have anything
  968.      to do with the DO statement above.  SNAP! does not associate 'foo' with
  969.      'program'.  The next time SNAP! sees 'DO &program' it will not assume that
  970.      'program' has the value 'foo'. If you want SNAP! to associate values with
  971.      macros, use the SNAPMACRO directive.
  972.  
  973.  
  974.                                           16
  975.  
  976.  
  977.  
  978.  
  979.  
  980.  
  981.  
  982.      As a side benefit, SNAPCODE statements help document your code by
  983.      specifying the permissible values that particular macros can take.
  984.  
  985.  
  986.      Multiple Program and Data Directories
  987.  
  988.      SNAP! prompts you for a program and a data directory on the system screen,
  989.      but you can define additional directories with special directives, as
  990.      follows:
  991.           *# SNAP PRGPATH \foo\bar1
  992.           *# SNAP PRGPATH \foo\bar2
  993.                ... and so forth
  994.      and
  995.           *# SNAP DATAPATH \foo\bar3
  996.  
  997.      When SNAP! looks for a file, it first searches the current directory, then
  998.      all the program directories (for a program-type file) or the data
  999.      directories (for a data-type file).
  1000.  
  1001.      Program-type files include: programs, procedure files, format files, report
  1002.      forms, label forms, FoxPro 2.0 files (queries, screens and menu files),
  1003.      memory files and binary files.
  1004.  
  1005.      Data-type files include databases, indexes, and multiple indexes.
  1006.  
  1007.  
  1008.      Program Narratives
  1009.  
  1010.      An important part of a well-documented system is a narrative explanation of
  1011.      the purpose of each program module.  Unfortunately, SNAP! can't figure this
  1012.      out on its on.  However, it does allow you to describe your programs, and
  1013.      it provides a way for your descriptions to be echoed to the HEADINGS.DOC
  1014.      file.  Any comments that start with "*)" will be interpreted as program
  1015.      narratives and will be sent to HEADINGS.DOC.  Naturally, these comments
  1016.      will also be left alone in the source code.  Normally you will want to put
  1017.      these narratives immediately below the SNAP! headings, but SNAP! will
  1018.      recognize them wherever they are.
  1019.  
  1020.  
  1021.      Other SNAP! Directives
  1022.  
  1023.      Other SNAP! commands, or directives, allow you to turn cross- referencing
  1024.      and program formatting on or off for particular programs.  For example, you
  1025.      may have "boilerplate" code that you have thoroughly debugged and formatted
  1026.      which you insert into many other systems.  It would be unnecessarily
  1027.      time-consuming to reformat this code every time you ran SNAP!.  SNAP!
  1028.      provides other commands to temporarily suspend cross-referencing and
  1029.      formatting-- XREF, FORMAT, INDENT, CAPITAL, and EXPAND.  Each of these
  1030.      commands accepts three settings--ON, OFF and SUSPEND.  The ON and OFF
  1031.      commands are effective until SNAP! sees another directive, while SUSPEND is
  1032.      in effect only until the end of the current program or procedure.  For
  1033.      example, if you insert this line in your code:
  1034.  
  1035.                                           17
  1036.  
  1037.  
  1038.  
  1039.  
  1040.  
  1041.  
  1042.  
  1043.           *# SNAP XREF OFF
  1044.      no tokens will be cross-referenced until this line is encountered:
  1045.           *# SNAP XREF ON
  1046.      On the other hand,
  1047.           *# SNAP XREF SUSPEND
  1048.      suspends cross-referencing only for the current file.  It starts up again
  1049.      when the next program or procedure is documented.
  1050.  
  1051.      I suspend cross-referencing for commonly-used subroutines in my code.  For
  1052.      example, since Clipper does not have a BROWSE command, I often include a
  1053.      public-domain BROWSE program in my systems. This is a standalone module
  1054.      that really has nothing to do with the rest of my system, and I don't want
  1055.      its variables cluttering up my cross-reference report.  So, I say:
  1056.           *# SNAP XREF SUSPEND
  1057.      at the top of the file and SNAP! leaves it alone.
  1058.  
  1059.      SNAP FORMAT works in the same way.  If format is off, no indenting or
  1060.      capitalization will be done.  When SNAP! sees a SNAP FORMAT statement, it
  1061.      affects the internal codes that determine whether indenting, capitalization
  1062.      and key word expansion (or contraction) take place.  The three commands
  1063.      (INDENT, CAPITAL and EXPAND) turn specific features on or off.  Thus, the
  1064.      following sequence suspends indenting and capitalization, but enables key
  1065.      word expansion:
  1066.           *# SNAP FORMAT SUSPEND
  1067.           *# SNAP CAPITAL ON
  1068.      Thus, FORMAT is a shorthand way of referring to CAPITAL, INDENT and EXPAND
  1069.      all at once.
  1070.  
  1071.      If *# is an inconvenient sequence for you (e.g, it may cause confusion with
  1072.      the British pound sign), you can change it with the /T switch on the
  1073.      command line.  For example, if you invoke SNAP! with the switch "/T*$",
  1074.      SNAP! will use *$ to designate SNAPMACRO, SNAPCODE and other SNAP!
  1075.      directives.  You must start this sequence with an asterisk (so that dBASE
  1076.      knows it is a comment) and it cannot be more than three characters long.
  1077.  
  1078.  
  1079.  
  1080.  
  1081.  
  1082.  
  1083.  
  1084.  
  1085.  
  1086.  
  1087.  
  1088.  
  1089.  
  1090.  
  1091.  
  1092.  
  1093.  
  1094.  
  1095.  
  1096.                                           18
  1097.  
  1098.  
  1099.  
  1100.  
  1101.  
  1102.  
  1103.  
  1104.                             Source Code Formatting Options
  1105.  
  1106.  
  1107.      File Headings
  1108.  
  1109.      One of the most useful SNAP! features is a heading written to each file in
  1110.      the system.  Each heading indicates:
  1111.  
  1112.           Program name
  1113.           System name
  1114.           Copyright notice
  1115.           Author
  1116.           Procedures defined within this file
  1117.           Which programs this program calls
  1118.           Which programs call this program
  1119.           Databases, index files, report forms, format files, label forms,
  1120.           memory files, etc. used by this program
  1121.           Date and time documented.
  1122.  
  1123.      A sample heading is included in the Appendix.   The sample heading
  1124.      indicates that TODOINP.PRG is called by TODOMENU, calls TIME and TESTDATE,
  1125.      uses a file whose name is contained in S_TDFILE with index TODO (macro
  1126.      substitution was not used for this example), and also uses the TODOINP
  1127.      format file.  The heading also indicates the system name, author, copyright
  1128.      and date documented.  You may want to add more information to the header,
  1129.      such as a brief narrative description of the program's purpose.
  1130.  
  1131.      If you choose to write headings on your source code files (or if you choose
  1132.      any other option that modifies the source code file), it is a good idea to
  1133.      send the output files to a different directory than the input files so that
  1134.      your original source code remains unchanged.
  1135.  
  1136.      If you choose to send output files to the input directory, your original
  1137.      source code file will be renamed with a .BAK extension. If you use
  1138.      extensions to distinguish between program files, some of your original
  1139.      source code files could be destroyed.  For example, if your system uses the
  1140.      following program file names:
  1141.  
  1142.           SYSTEM.INP
  1143.           SYSTEM.EDT
  1144.           SYSTEM.RPT
  1145.           SYSTEM.DEL
  1146.  
  1147.      and so on, the output files containing the headings will retain these
  1148.      names.  Each of the input files, however, will have been renamed to a file
  1149.      called SYSTEM.BAK, and only the last one will still exist when SNAP!
  1150.      completes.  Therefore, you should always send output files to a separate
  1151.      subdirectory if you use this naming convention.
  1152.  
  1153.      As always, you should make regular backups, and you should be especially
  1154.      careful to make a full backup of all your files before running SNAP!.
  1155.  
  1156.  
  1157.                                           19
  1158.  
  1159.  
  1160.  
  1161.  
  1162.  
  1163.  
  1164.  
  1165.      By default, SNAP! leaves the date and time of last update unchanged for
  1166.      each of your files.  You can instruct SNAP! to update the date and time
  1167.      last changed on the source code format screen.  The headings written to
  1168.      each program file show the date and time SNAP! was run.
  1169.  
  1170.  
  1171.      Indentation
  1172.  
  1173.      SNAP! can also help format your source code to make it easier to read. 
  1174.      SNAP! can recognize dBASE control structures and indent the program
  1175.      statements underneath them.  By default, indentation is three spaces.  If
  1176.      you choose tabs, however, should you choose to use SNAP!'s source code
  1177.      printing routines you can select the number of spaces to be inserted for
  1178.      each tab as the code prints.
  1179.  
  1180.      However, if you would like to use spaces rather than tab characters for
  1181.      indenting, you can select this option from the Format options screen.  For
  1182.      example, you can instruct SNAP! to use three spaces for each indentation
  1183.      level.  This option has no effect if you do not choose to indent source
  1184.      code.  It is different from the option in the source code printing facility
  1185.      that also allows you to expand tabs.  If you choose to use spaces to indent
  1186.      your source code files, the source code will not contain tabs, so the
  1187.      source code printing tab-expansion feature will have no effect.
  1188.  
  1189.      If you choose to indent source code or create action diagrams, SNAP! will
  1190.      also scan your code for mismatched control structure terminators.  For
  1191.      example, if your code has the following sequence:
  1192.  
  1193.           DO WHILE T      statements
  1194.           .
  1195.           .
  1196.           .
  1197.           IF X = Y
  1198.           .
  1199.           .
  1200.           ENDIF
  1201.           ENDIF      <---- incorrect
  1202.  
  1203.      SNAP! will detect that the final statement should have been an ENDDO
  1204.      instead of an ENDIF and will display an appropriate error message.  SNAP!
  1205.      will accept 'END' as a valid abbreviation of ENDDO, ENDIF or ENDCASE.
  1206.  
  1207.      SNAP! does not track control structures across program or procedure
  1208.      boundaries.  Normally, this is not a problem since you cannot start a DO
  1209.      WHILE loop in one program and finish it in another.  BREAK statements,
  1210.      however, can exit from a BEGIN/END SEQUENCE control structure that is
  1211.      defined in another program. If SNAP! encounters a BREAK statement but
  1212.      cannot find the BEGIN/END SEQUENCE structure, it reports an error.  Just
  1213.      ignore it if you know that the BREAK is valid.
  1214.  
  1215.  
  1216.  
  1217.  
  1218.                                           20
  1219.  
  1220.  
  1221.  
  1222.  
  1223.  
  1224.  
  1225.  
  1226.      The format options screen allows you to add an extra level of indenting
  1227.      underneath procedures and functions.  By default, SNAP! indents procedures
  1228.      and functions like this:
  1229.           PROCEDURE something
  1230.           foo = bar
  1231.           ? 'Hello, sailor'
  1232.           RETURN
  1233.  
  1234.      If you choose to indent procedures and functions, your source will appear
  1235.      like this:
  1236.           PROCEDURE something
  1237.                foo = bar
  1238.                ? 'Hello, sailor'
  1239.           RETURN
  1240.  
  1241.      Most people indent CASE statements in the following way, as God intended:
  1242.  
  1243.           DO CASE
  1244.           CASE foo = bar
  1245.           CASE xyzzy = plugh
  1246.           ENDCASE
  1247.  
  1248.      Certain stubborn users, however, insist on indenting CASE statements like
  1249.      this:
  1250.  
  1251.           DO CASE
  1252.                CASE foo = bar
  1253.                CASE xyzzy = plugh
  1254.           ENDCASE
  1255.  
  1256.      If you invoke SNAP! with the -A command line switch, you too can use this
  1257.      wretched technique.
  1258.  
  1259.  
  1260.      Capitalization
  1261.  
  1262.      SNAP! will also capitalize dBASE key words found in your source code.  Key
  1263.      words are stored in a file called DBxWORDS.SNP where x is a 2, 3 or 4
  1264.      depending on the version of dBASE you are using (you can also specify
  1265.      another file).  SNAP! does not attempt to parse code statements to
  1266.      determine how a word is used, so if you use key words as variable or field
  1267.      names, they will also be capitalized.  Should you wish not to capitalize a
  1268.      particular key word, you can either delete it from the DBxWORDS.SNP file,
  1269.      or "comment it out" by putting an asterisk before it in the file (e.g.,
  1270.      RELEASE becomes *RELEASE).
  1271.  
  1272.      The preceding paragraph assumes you prefer "standard" capitalization--key
  1273.      words are capitalized, functions have an initial capital letter, and
  1274.      everything else is in lower case.  If not, you can change it on the Format
  1275.      screen.  You can select upper case, lower case, initial caps, or none
  1276.      (leave it alone) for both tokens and for key words.  Thus, if you were so
  1277.  
  1278.  
  1279.                                           21
  1280.  
  1281.  
  1282.  
  1283.  
  1284.  
  1285.  
  1286.  
  1287.      inclined, you could capitalize tokens (variables, etc.) and lowercase key
  1288.      words.
  1289.  
  1290.  
  1291.      Key Word Expansion and Compression
  1292.  
  1293.      SNAP! will allow you to expand abbreviated key words to their full length,
  1294.      or to abbreviate the key words to four characters. Compilers don't care
  1295.      about any of this, but the dBASE interpreter runs programs slightly,
  1296.      usually very slightly, faster if the key words are abbreviated to their
  1297.      first four characters.  An option on the Format screen controls how
  1298.      expansion or compression is done.  The default is no expansion or
  1299.      compression--SNAP! leaves your code alone.  However, you can select
  1300.      expansion, or compression to any number of characters between 4 and 9.
  1301.  
  1302.      Please be careful with this option, especially if you are not very careful
  1303.      about how you name variables.  The only thing SNAP! knows about key words
  1304.      are that they are in the key words file. If one of your variables is a key
  1305.      word (or a valid abbreviation of a key word), SNAP! will cheerfully expand
  1306.      or contract it along with everything else.  SNAP! cannot tell how whether a
  1307.      particular word is being used as a command or as a variable.  Normally,
  1308.      this will not be a big problem--if you named a variable "title" and
  1309.      compressed key words, it will now be called "titl".  Problems could arise,
  1310.      however, if two variables are valid abbreviations of the same key word
  1311.      (e.g., "other" and "otherw", both of which are valid abbreviations of
  1312.      OTHERWISE).  If you compress key words and have such variable names, both
  1313.      variables will be compressed to OTHE, and there is no way to separate them
  1314.      again.  Also, if you are using a dialect of X-Base that supports
  1315.      user-defined functions (UDFs), and if one of the UDFs has the same name as
  1316.      a key word (Tom Rettig's BLANK() function, for example), the UDF name will
  1317.      be compressed (assuming the UDF name was in the key words file). If you
  1318.      compress keywords in this case, nothing desirable will happen.
  1319.  
  1320.      Because of the irrevocable changes that this option can make, SNAP! will
  1321.      not allow you to exercise it if the source and output directories are the
  1322.      same.  In other words, SNAP! will refuse to overwrite your original source
  1323.      code files if you select this option.  Big brother is looking out for you.
  1324.  
  1325.      If you use the compression option, please run the compressed code and
  1326.      ensure that it works before you delete the backups that SNAP! made.
  1327.  
  1328.      Key words that are identified in the key words file as functions (they have
  1329.      () after their name--see below) are never affected by key word compression
  1330.      or expansion.
  1331.  
  1332.  
  1333.      Suppressing Blank Lines and Comments
  1334.  
  1335.      You can suppress blank lines and/or comments from the output files by
  1336.      selecting the appropriate options on the Format screen. I do not recommend
  1337.      this, but it does make interpreted X-Base applications run slightly faster. 
  1338.      Please be doubly sure to make backups before doing this.  SNAP!'s default
  1339.  
  1340.                                           22
  1341.  
  1342.  
  1343.  
  1344.  
  1345.  
  1346.  
  1347.  
  1348.      options are to leave both blank lines and comments in the output file, so
  1349.      you have to take special action yourself before they will be dropped.
  1350.  
  1351.      Clipper "/* */" and "//" comments are not removed even if you elect to
  1352.      eliminate comments.
  1353.  
  1354.      As with key word expansion and compression, you cannot select this option
  1355.      if the source and output subdirectories are the same.
  1356.  
  1357.      If you know how to design an effective counterpart to this feature--how to
  1358.      put the comments back in--please contact me about a potentially lucrative
  1359.      commercial venture.
  1360.  
  1361.  
  1362.      Key Words File
  1363.  
  1364.      Capitalization, cross-referencing and key word expansion and compression
  1365.      are controlled by the words in the key words file. The key word file should
  1366.      contain one key word per line. Capitalization and order do not matter,
  1367.      except that if two identical key words have different flags (see below),
  1368.      the last one takes precedence.
  1369.  
  1370.      By inserting the correct characters in the key word file, you can cause
  1371.      certain key words or variables to be handled differently than normal.  The
  1372.      following characters have a special meaning in the key word file when
  1373.      inserted immediately before a word:
  1374.  
  1375.           *    Comments out the word.  SNAP! acts as if it were not in the key
  1376.                word file at all.
  1377.  
  1378.           !    Capitalize, but do no cross-reference even when the option to
  1379.                cross-reference key words is in effect.  You may want to use this
  1380.                character for often-used but uninteresting key words such as TO
  1381.                or, perhaps, SAY.
  1382.  
  1383.           @    Capitalize and always cross-reference this word, even when the
  1384.                option to cross-reference key words is not in effect.  You might
  1385.                want to use this for especially important key words such REPLACE,
  1386.                SAVE, or QUIT.
  1387.  
  1388.           %    Neither capitalize nor cross-reference, regardless of whether the
  1389.                options to capitalize or cross-reference key words are in effect.
  1390.                You may want to use this character for variables that you use
  1391.                frequently, but that you are not interested in
  1392.                cross-referencing--perhaps "i", "choice", "action", or "lineno". 
  1393.                This will keep them from cluttering up the cross-reference
  1394.                report.  Such words are not affected by key word expansion or
  1395.                contraction.
  1396.  
  1397.           ()   If the *last* two characters in a key word are (), the key word
  1398.                will ordinarily have an initial capital letter in the formatted
  1399.                output.  The DB3WORDS.SNP file that comes with SNAP! uses this
  1400.  
  1401.                                           23
  1402.  
  1403.  
  1404.  
  1405.  
  1406.  
  1407.  
  1408.  
  1409.                notation to designate the Tom Rettig key words (Tom Rettig is the
  1410.                author of a popular set of functions for dBASE III and Clipper)
  1411.                and the keywords in the PROCLIP3 library.  Functions are never
  1412.                affected by key word expansion or contraction.
  1413.  
  1414.      The following examples illustrate how to use these special characters:
  1415.  
  1416.           *note
  1417.           !SAY
  1418.           @REPLACE
  1419.           %CHOICE
  1420.           SOME_FUNCTION()
  1421.  
  1422.      There are two ways to tell SNAP! about key words.  First, the Format screen
  1423.      allows you to specify the main key words file, which will usually be
  1424.      DB4WORDS.SNP for FoxPro or dBASE IV systems, DB3WORDS.SNP for Clipper,
  1425.      dBASE III and FoxBASE+, and DB2WORDS.SNP for any wretches still using dBASE
  1426.      II.  In addition, SNAP! will look for a file called PERSONAL.KEY in the
  1427.      SNAP! subdirectory (the subdirectory where you put SNAP!--it doesn't
  1428.      actually have to be named "SNAP!").  Anything found in PERSONAL.KEY will be
  1429.      treated just as if it were in, say, DB4WORDS.SNP.  Therefore, you can
  1430.      customize your key words list without messing up the factory-installed
  1431.      DB4WORDS.SNP file.
  1432.  
  1433.      SNAP! is distributed with key words files for a variety of third-party
  1434.      function libraries.  Naturally, different programmers will use different
  1435.      libraries.  If you use one of the supported libraries, just include its key
  1436.      words into the main SNAP! key words file (e.g., DB4WORDS.SNP) or into your
  1437.      PERSONAL.KEY file.  The best way to add a library's key words is to put "*#
  1438.      INCLUDE" statements like this in your PERSONAL.KEY file or into
  1439.      DB4WORDS.SNP:
  1440.         *# INCLUDE rettig.key
  1441.         *# INCLUDE proclip.key
  1442.      SNAP! will then recognize all the key words in RETTIG.KEY.  These "*#
  1443.      INCLUDE statements" can be nested, but they have to be in either the main
  1444.      key words file or in PERSONAL.KEY.  A "*# INCLUDE" statement in a source
  1445.      code file is ignored.  In addition to using "*# INCLUDE" statements, you
  1446.      can use a word processor or program editor to move the words into
  1447.      PERSONAL.KEY or DB4WORDS.SNP.
  1448.  
  1449.      "Support" for third-party libraries is really just a list of key words. 
  1450.      You can easily add key words from any other library that I didn't include--
  1451.      SNAP! itself doesn't have to be modified.
  1452.  
  1453.      SNAP! provides enough space for a maximum of 1,500 key words.  This is far
  1454.      more than is required for all dialects of X-Base put together, but is not
  1455.      enough for all of the third-party libraries also.  Therefore, you should
  1456.      just update the main key words file for the libraries you actually use. 
  1457.      Any key words past the limit will be ignored.  
  1458.  
  1459.      SNAP! does not try to detect duplicate key words.  They don't cause any
  1460.      harm, but they all count against the limit.  If you have duplicate key
  1461.  
  1462.                                           24
  1463.  
  1464.  
  1465.  
  1466.  
  1467.  
  1468.  
  1469.  
  1470.      words with different control characters (see above), the control character
  1471.      set that will be used by SNAP! is deterministic but unpredictable. 
  1472.  
  1473.  
  1474.  
  1475.  
  1476.  
  1477.  
  1478.  
  1479.  
  1480.  
  1481.  
  1482.  
  1483.  
  1484.  
  1485.  
  1486.  
  1487.  
  1488.  
  1489.  
  1490.  
  1491.  
  1492.  
  1493.  
  1494.  
  1495.  
  1496.  
  1497.  
  1498.  
  1499.  
  1500.  
  1501.  
  1502.  
  1503.  
  1504.  
  1505.  
  1506.  
  1507.  
  1508.  
  1509.  
  1510.  
  1511.  
  1512.  
  1513.  
  1514.  
  1515.  
  1516.  
  1517.  
  1518.  
  1519.  
  1520.  
  1521.  
  1522.  
  1523.                                           25
  1524.  
  1525.  
  1526.  
  1527.  
  1528.  
  1529.  
  1530.  
  1531.                                  Reports and Outputs
  1532.  
  1533.      SNAP! can produce any combination of several reports.  Each report is
  1534.      optional and can be selected or suppressed on the Options Screen. However,
  1535.      some reports (e.g. Database summary, Index summary) require you to search
  1536.      the tree rather than document a single program.
  1537.  
  1538.      Normally, SNAP! tells you that it is producing a particular report, but
  1539.      does not display the report on the screen.  However, each report other than
  1540.      a file heading, may be displayed on the screen as it is echoed to a file. 
  1541.      You can enable screen echoing by invoking SNAP! with the /S command line
  1542.      parameter.  I like to see the reports being generated but some people
  1543.      prefer to silence the screen to improve SNAP!'s speed.  Note that the /S
  1544.      switch only affects the screen display of reports and has no effect on the
  1545.      status screens that are displayed as SNAP! scans source code files.
  1546.  
  1547.      The program contains default filenames (e.g., XREF.DOC for the
  1548.      cross-reference report), but you can change them if you wish.
  1549.  
  1550.  
  1551.      Controlling the Printer
  1552.  
  1553.      SNAP! allows you to specify a number of parameters for controlling your
  1554.      printer.  These parameters include margins, setup strings, and so forth. 
  1555.      In addition to entering them directly, you can also press F2 and select
  1556.      some standard printer configurations from a scrollable list.  These printer
  1557.      definitions are stored in the SNAPPRT.SNP file, an ASCII file which you can
  1558.      edit yourself to add more printer definitions.  SNAP! supports up to 10
  1559.      printer definitions.
  1560.  
  1561.  
  1562.      System Summary
  1563.  
  1564.      This report shows the following information:
  1565.           System name
  1566.           Author
  1567.           Current date and time
  1568.           Lines of code
  1569.           Number of programs, procedures, procedure files, indexes, and so forth
  1570.           Names of databases, indexes, report forms, label forms and memory
  1571.           files
  1572.  
  1573.      The system summary would ordinarily be the first page in the documentation. 
  1574.      It, together with the tree diagram, provides a basic overview of the entire
  1575.      system.  See Appendix A for an example.
  1576.  
  1577.      Tree Structure Diagram
  1578.  
  1579.      If you choose the default option of documenting all programs in the tree,
  1580.      SNAP! will produce a chart showing which programs call which other programs
  1581.      and which programs use which databases.  The tree diagram, like other SNAP!
  1582.  
  1583.  
  1584.                                           26
  1585.  
  1586.  
  1587.  
  1588.  
  1589.  
  1590.  
  1591.  
  1592.      reports, appears on the screen and is echoed to a file (default name of
  1593.      TREE.DOC).
  1594.  
  1595.      Any procedures or databases in the tree will be designated like this:
  1596.           Gee (procedure in procedure.file)
  1597.           Whiz (database ALIAS baz)
  1598.  
  1599.      SNAP! by default includes programs, procedures, functions, format files and
  1600.      databases in the tree. The Tree Screen includes options that allow you to
  1601.      put indexes, report forms, label forms and memory files in the tree also,
  1602.      or to suppress any of the default file types except program files.
  1603.  
  1604.      Note that the databases (and other non-program files) are shown underneath
  1605.      the programs that actually call them.  If a database is opened in one
  1606.      program and remains open in another program, SNAP! will show the database
  1607.      as called only by the first program file.
  1608.  
  1609.      SNAP! has some code to detect certain types of recursion and prevent the
  1610.      tree from marching off the right side of the page and eventually off the
  1611.      end of the world.  SNAP! catches programs that call themselves and programs
  1612.      that call another program that calls the original program again.  If the
  1613.      recursion is more subtle than that, SNAP! will eventually give up when
  1614.      recursion reaches 25 levels.  You will have become bored watching the
  1615.      display by that point.
  1616.  
  1617.      SNAP! detects calls to other programs, procedures and functions when they
  1618.      are in one of the following formats: 
  1619.           DO something
  1620.           SET KEY 300 TO something
  1621.           ON KEY 300 DO something
  1622.           ON KEY=300 DO something
  1623.           ON KEY DO something
  1624.           ON KEY LABEL keylabel DO something
  1625.           ON ESCAPE [or ERROR] DO something
  1626.           ON READERROR DO something
  1627.           ON SELECTION PAD ... DO something
  1628.           ON SELECTION POPUP ... DO something
  1629.           ON PAGE x AT LINE y DO something
  1630.           foo = something()    <---SNAP! detects other UDF calls also 
  1631.           CHAIN something
  1632.           SWITCH something
  1633.           SET FORMAT TO something
  1634.  
  1635.      Further, SNAP! detects calls to user defined functions in certain Clipper
  1636.      functions--MEMOEDIT, DBEDIT and ACHOICE.
  1637.  
  1638.      SNAP! searches through procedure files to generate a complete list of
  1639.      procedures and functions.  It identifies procedure files in the following
  1640.      ways:
  1641.           EXTERNAL procfile
  1642.           SET PROCEDURE TO procfile
  1643.           SET UDF TO procfile
  1644.  
  1645.                                           27
  1646.  
  1647.  
  1648.  
  1649.  
  1650.  
  1651.  
  1652.  
  1653.      Also, SNAP! will detect any procedures that are tacked on to the bottom of
  1654.      a PRG file, a coding style that Clipper allows.
  1655.  
  1656.      There are other "things" that sometimes act like programs.  For example,
  1657.      dBASE IV creates an FRG file whenever you use its report writer.  In
  1658.      reality, this file is a procedure file that contains code to produce the
  1659.      report.  SNAP! detects that an FRG file exists and shows it begin called
  1660.      from the program that initiates the report--the one that contains the
  1661.      REPORT FORM ... TO ... statement.  Similarly, label LBG files are also
  1662.      detected and documented.
  1663.  
  1664.      The tree report is illustrated in the Appendix.
  1665.  
  1666.  
  1667.      File List
  1668.  
  1669.      SNAP! can write a simple list of all files used in the system, including
  1670.      programs, databases, index files, and so on.  This report can be useful for
  1671.      identifying which files in a directory are associated with an application. 
  1672.      The file list can also be fed into the source code printing routines at a
  1673.      later point, so that the program files can be printed without going through
  1674.      a time-consuming complete documentation run again. 
  1675.  
  1676.      Database Summary
  1677.  
  1678.      The database summary report contains two parts: 1) the database structure
  1679.      for each database in the system and a list of programs which use it; and 2)
  1680.      a listing of each data field in the system and the databases that contain
  1681.      it.
  1682.  
  1683.      SNAP! tries to figure out which indexes, report forms and label forms are
  1684.      associated with each database.  It tracks the following statements:
  1685.           USE dbfname
  1686.           SELECT A (or B, C, etc. up through J)
  1687.           SELECT aliasname
  1688.           CLOSE DATABASES
  1689.           CLOSE ALL
  1690.           USE
  1691.      SNAP! knows how to account for macros in each of these constructions,
  1692.      assuming you have defined the macro.  For example, USE &temp will be
  1693.      interpreted to mean USE abcfile if you have previously defined &temp to
  1694.      mean abcfile (see section on SNAPMACRO statements for more details).
  1695.  
  1696.      SNAP! is reasonably good, but certainly not perfect, at figuring out which
  1697.      database is active at a particular spot in the code. There are, however,
  1698.      some limitations you should be aware of. First, SNAP! does not track
  1699.      databases or areas across program files or procedures.  Whenever SNAP!
  1700.      begins documenting a file, it assumes that no databases are in use and that
  1701.      area A is active.  Also, SNAP! does not try to interpret conditional
  1702.      structures.  For example, consider the following code: 
  1703.           IF .T.
  1704.                USE foo
  1705.  
  1706.                                           28
  1707.  
  1708.  
  1709.  
  1710.  
  1711.  
  1712.  
  1713.  
  1714.           ELSE
  1715.                USE bar
  1716.           ENDIF
  1717.  
  1718.      SNAP! looks at this code one line at a time.  The last USE statement it
  1719.      sees is 'USE bar'.  That statement will never actually be executed (because
  1720.      of the IF test), but SNAP! doesn't know that.  You may need to use SNAPCODE
  1721.      statements to help SNAP! figure out what is happening in cases such as this
  1722.      one.
  1723.  
  1724.      SNAP! identifies databases in these ways:
  1725.  
  1726.           1)   USE statements, but only those followed by a database name;
  1727.           2)   COPY TO statements, including COPY TO ... SDF.  If the command
  1728.                copies to an SDF file that does not have an explicit extension,
  1729.                SNAP! supplies .TXT. Otherwise SNAP! assumes databases to have
  1730.                .DBF extensions.
  1731.           3)   DELETE FILE xxx.DBF
  1732.           4)   CREATE foo FROM bar    (SNAP! picks up both foo and bar)
  1733.           5)   CREATE foo
  1734.           6)   COPY FILE foo.dbf TO bar.dbf
  1735.           7)   COPY STRUCTURE [EXTENDED] TO foo
  1736.           8)   SORT ON keyname TO foo
  1737.  
  1738.      A statement that tests for the existence of a database (e.g. IF
  1739.      FILE("xyz")) will not by itself be identified as a database reference. 
  1740.      Currently, SNAP! imposes an overall limit of 1,024 fields in the entire
  1741.      system.  If you exceed that number, SNAP! complains and does not include
  1742.      the excess fields in the database summary.
  1743.  
  1744.      A sample database summary report is included in appendix A.
  1745.  
  1746.  
  1747.      Index File Summary
  1748.  
  1749.      The index file summary lists each index file referenced in the system and
  1750.      attempts to show the fields it is indexed on and the files that use it.  It
  1751.      also shows multiple index files and their tags in a separate section of the
  1752.      report. 
  1753.  
  1754.      SNAP! first checks for an index file with the default extension you
  1755.      specified on the "Other Options" screen. If it cannot find a file with that
  1756.      extension, it tries to find one with an extension of NDX (the usual
  1757.      extension of dBASE II, dBASE III index files).  If it cannot find this
  1758.      file, it tries to find the same file name with an NTX extension (the usual
  1759.      extension of Clipper index files).  Failing that, it tries FoxBASE+/FoxPro
  1760.      IDX extensions.  If SNAP! cannot find one of those either, it gives up and
  1761.      reports that the NDX file could not be found.  If, however, it could find
  1762.      the Clipper or FoxBASE+/FoxPro file, it documents it appropriately.
  1763.  
  1764.  
  1765.  
  1766.  
  1767.                                           29
  1768.  
  1769.  
  1770.  
  1771.  
  1772.  
  1773.  
  1774.  
  1775.      SNAP! also shows the database associated with each index, if it could
  1776.      figure it out.  The database summary section of this documentation
  1777.      discusses the assumptions that SNAP! makes about which database is active.
  1778.  
  1779.      SNAP! identifies indexes in five ways:
  1780.  
  1781.           1)   INDEX ON xyz TO indexfile
  1782.           2)   USE xyz INDEX indexfile1,indexfile2,indexfile3 ...
  1783.           3)   SET INDEX TO indexfile1,indexfile2,indexfile3 ... 
  1784.           4)   DELETE FILE xyz.NDX
  1785.           5)   COPY FILE foo.ndx TO bar.ndx
  1786.  
  1787.      In cases 2 and 3, each index file will be separately identified and
  1788.      documented.
  1789.  
  1790.      A statement that tests for the existence of an index (e.g. IF
  1791.      FILE("xyz.NDX")) will not by itself be identified as an index reference.
  1792.  
  1793.      SNAP! identifies multiple index files (MDX files) in the following ways:
  1794.           1)   INDEX ON bar TAG foo OF xyz
  1795.           2)   USE xyz  (when XYZ.MDX exists)
  1796.           3)   SET INDEX TO xyz
  1797.           4)   COPY TAG foo OF xyz TO ndxname
  1798.  
  1799.      A sample index file summary in shown in the Appendix.
  1800.  
  1801.  
  1802.      Format File Summary
  1803.  
  1804.      SNAP! also produces a report showing each format file used in the system
  1805.      and the programs that call it.  A sample report is in the Appendix.
  1806.  
  1807.      SNAP! identifies format files in two ways:
  1808.  
  1809.           1) SET FORMAT TO xyz
  1810.           2) DELETE FILE xyz.FMT
  1811.  
  1812.      In case 1, if this is a dBASE II system, SET FORMAT TO SCREEN and SET
  1813.      FORMAT TO PRINT are not flagged as references to format files.
  1814.  
  1815.      A statement that tests for the existence of an format (e.g. IF
  1816.      FILE("xyz.FMT")) will not by itself be identified as an format reference.
  1817.  
  1818.  
  1819.      Report Form Summary
  1820.  
  1821.      SNAP! also produces a report showing each report form used in the system,
  1822.      the report parameters, and the programs that call it. For dBASE III,
  1823.      FoxBASE+ and Clipper systems, SNAP! shows a mock- up of each report and the
  1824.      expressions that go into each column. It also indicates which database is
  1825.      associated with the report form.
  1826.  
  1827.  
  1828.                                           30
  1829.  
  1830.  
  1831.  
  1832.  
  1833.  
  1834.  
  1835.  
  1836.      Documentation for dBASE IV and FoxPro report formats is simpler and does
  1837.      not include a mock-up of the report.  Documentation for both dBASE IV and
  1838.      FoxPro shows the fields or expressions that comprise the detail records. 
  1839.      Since both systems contain very sophisticated and elaborate report
  1840.      generators, it is not practical to summarize how the report looks, so SNAP!
  1841.      focuses on its contents.  You may wish to take a screen print of the report
  1842.      generator as additional documentation.  Also, apart from the documentation
  1843.      that SNAP! automatically produces, you may wish to retain a sample report
  1844.      printout.  Such a sample is probably a better indication of what the report
  1845.      does than the SNAP! documentation.
  1846.  
  1847.      A sample dBASE III report is in the Appendix.
  1848.  
  1849.      SNAP! identifies report forms in two ways:
  1850.  
  1851.           1)   REPORT FORM xyz ...
  1852.           2)   DELETE FILE xyz.FRM
  1853.  
  1854.      A statement that tests for the existence of an form (e.g. IF
  1855.      FILE("xyz.FRM")) will not by itself be identified as an report form
  1856.      reference.
  1857.  
  1858.  
  1859.      Label Form Summary
  1860.  
  1861.      The label form summary shows the parameters of each label form in the
  1862.      system.  It also indicates which database is associated with each label
  1863.      form.  A sample report is in the Appendix.
  1864.  
  1865.  
  1866.      Procedure File Summary
  1867.  
  1868.      SNAP! allows you to prepare a summary of files that contain procedures (see
  1869.      example in appendix A).  This summary shows the procedures in each
  1870.      procedure file and the programs and procedures that each one calls and is
  1871.      called by.  The report shows each procedure and function in the TopFile
  1872.      system.  SNAP! also reports the parameters expected by any procedures or
  1873.      functions that accept parameters.  Note that this report covers both
  1874.      procedure files and ordinary program files that also contain procedures (as
  1875.      Clipper allows).
  1876.  
  1877.  
  1878.      Other Summary Reports
  1879.  
  1880.      SNAP! also produces summary reports for the following additional file
  1881.      types:
  1882.           1) Memory files
  1883.           2) Binary (LOAD/CALL) files
  1884.           3) Other files
  1885.  
  1886.      Other files are generally text files that are specified in the following
  1887.      ways:
  1888.  
  1889.                                           31
  1890.  
  1891.  
  1892.  
  1893.  
  1894.  
  1895.  
  1896.  
  1897.           1) SET ALTERNATE TO xyz
  1898.           2) SET PRINTER TO xyz
  1899.           3) COPY MEMO to xyz
  1900.           4) APPEND MEMO FROM xyz
  1901.           5) COPY FILE xyz TO abc   <-- when SNAP! doesn't recognize the file
  1902.                                         extension
  1903.           6) TYPE xyz
  1904.  
  1905.      The other files summary report lists these files and shows which programs
  1906.      or procedures made a reference to the file.  I don't guarantee that the
  1907.      report will pick up every possible "other" file, but it seems to catch all
  1908.      of them in the sample code I use to test it.
  1909.  
  1910.  
  1911.      Variable Cross-Reference Report
  1912.  
  1913.      Another useful report available through SNAP! is a variable cross-reference
  1914.      listing, showing line numbers for each program that references a particular
  1915.      variable.  'Variable' in this context includes field names, file names and
  1916.      anything else that isn't a key word, numeric constant, punctuation mark or
  1917.      quoted string.
  1918.  
  1919.      If you elect to display the variable cross-reference report (by responding
  1920.      'Y' to the question on the options menu), you can view the Cross-reference
  1921.      Options Screen.  The Cross-reference Options Screen allows you to select
  1922.      the type of "things" that will included on the cross-reference report.  You
  1923.      will have the option to include only PUBLIC variables (this option has no
  1924.      meaning if this is a dBASE II system).  You also get the following choices:
  1925.  
  1926.           Include other variables and tokens
  1927.           Include key words
  1928.           Include numeric constants
  1929.  
  1930.      Your responses to these prompts (and your use of special characters in the
  1931.      key words file--see below) determine which words will appear on the
  1932.      cross-reference report.
  1933.  
  1934.      The cross-reference report adds certain codes to the end of a line number
  1935.      reference when the reference is particularly interesting.  SNAP! looks for
  1936.      the following statements to tell if a variable or field name (assume its
  1937.      name is 'abc') is interesting:
  1938.  
  1939.           Reference Type                                   Report Flag
  1940.           abc = 4                                                 *
  1941.           STORE 4 TO abc                                          *
  1942.           WAIT to abc                                             *
  1943.           @ 1,1 GET abc PICTURE "blah, blah"                      G
  1944.           ACCEPT "something" TO abc                               G
  1945.           INPUT abc                                               G
  1946.           REPLACE abc WITH something                              R
  1947.           RELEASE abc                                             x
  1948.           PUBLIC abc                                              P
  1949.  
  1950.                                           32
  1951.  
  1952.  
  1953.  
  1954.  
  1955.  
  1956.  
  1957.  
  1958.           PRIVATE abc                                             V
  1959.           LOCAL abc                                               V
  1960.           STATIC abc                                              V
  1961.           &abc                                                    &
  1962.           DECLARE abc[100]                                        A
  1963.           DIMENSION abc(100,200)                                  A
  1964.           USE abc [INDEX ...] [ALIAS ...]                         U
  1965.           DO foo WITH @abc                                        @
  1966.  
  1967.      As the following sample excerpt from the cross reference report
  1968.      illustrates, you can tell at a glance what is happening to the variables
  1969.      you are using:
  1970.  
  1971.      ABC
  1972.           TODO.PRG         30P   41    42    43G   44    45*   46G
  1973.           TDINPUT.PRG     123V  234*  235   237
  1974.           SETFILT.PRG      16    24    28    32
  1975.           TDEDIT.PRG      107*  133   134   135   136   138x
  1976.  
  1977.      This report shows that variable 'abc' was used in four programs (TODO,
  1978.      TDINPUT, SETFILT and TDEDIT).  Within TODO, it was declared a PUBLIC
  1979.      variable on line 30; referenced but not changed on lines 41, 42 and 44;
  1980.      used in a GET statement on lines 43 and 46; modified in line 45; and
  1981.      released on line 72.  TDINPUT declared it to be PRIVATE (line 123),
  1982.      assigned it a value in line 234, then referred to it in lines 235 and 237.
  1983.  
  1984.      A legend to explain all these flags is printed at the top of each
  1985.      cross-reference report, so you do not need to remember what they all mean.
  1986.  
  1987.      SNAP! will not flag a 'RELEASE ALL' statement as a reference, nor will it
  1988.      figure out that a 'RESTORE FROM xyz.mem' may overwrite other variables. 
  1989.      Neither of these statements will generate a cross-reference listing for any
  1990.      variables (though xyz.mem will be referenced).  Of course, you can have
  1991.      SNAP! cross-reference the RELEASE and RESTORE statements themselves.
  1992.  
  1993.      By default, references to a database field prefaced by the alias (e.g.,
  1994.      foo->bar) will be shown as one token in the cross reference file.  If you
  1995.      do not like this convention, the /C command line option turns it off, so
  1996.      that foo and bar will be referenced separately.
  1997.  
  1998.      At the bottom of the report, SNAP! produces a list of public variables, a
  1999.      list of macros and a list of arrays.  The macro list is subdivided into
  2000.      macros that you defined to SNAP! and those you didn't.  If you defined a
  2001.      macro, its definition is also shown.
  2002.  
  2003.      A new option introduced in SNAP! 5.0 is the local cross reference report,
  2004.      so called because it is "local" to a particular program or procedure file--
  2005.      all variables and references in that a file are stored together in the
  2006.      local cross reference report, and are not merged together with all such
  2007.      references throughout the program system as is usual.  This report is
  2008.      generally less useful than the default global cross reference (which is
  2009.      what you are used to if you've been using SNAP! in the past).  It does have
  2010.  
  2011.                                           33
  2012.  
  2013.  
  2014.  
  2015.  
  2016.  
  2017.  
  2018.  
  2019.      the singular benefit of using almost no memory, however, so you can
  2020.      document much larger systems if you elect to create a local cross
  2021.      reference.  The local cross reference report and the global cross reference
  2022.      are mutually exclusive.  You chose to create a local cross reference on the
  2023.      cross reference options screen.
  2024.  
  2025.      Another technique for documenting a large system is to split your system
  2026.      into several smaller parts and document them separately.  Should you choose
  2027.      to do so, you might want to explore a program written by Charles S.
  2028.      Galloway called SNAP! XRef Merger that merges multiple cross references
  2029.      reports into a single consolidated report.  It is a nice piece of work.  It
  2030.      is available directly from Mr. Galloway at 3211 Burns Place, Raleigh, NC
  2031.      27609.  He will send you a copy if you send him a stamped mailer and a
  2032.      formatted diskette.
  2033.  
  2034.      The cross-reference report interacts closely with the key word file. 
  2035.      Specifically, the key word file is how SNAP! can tell what is a key word
  2036.      and what is not.  Additionally, by inserting the correct characters in the
  2037.      key word file, you can cause certain key words or variables to be handled
  2038.      differently than usual.  The following characters have a special meaning in
  2039.      the key word file when inserted immediately before a word:
  2040.  
  2041.           *    Comments out the word.  SNAP! acts as if it were not in the key
  2042.                word file at all.
  2043.  
  2044.           !    Capitalize, but do no cross-reference even when the option to
  2045.                cross-reference key words is in effect.  You may want to use this
  2046.                character for often-used but uninteresting key words such as TO
  2047.                or, perhaps, SAY.
  2048.  
  2049.           @    Capitalize and always cross-reference this word, even when the
  2050.                option to cross-reference key words is not in effect.  You might
  2051.                want to use this for especially important key words such REPLACE,
  2052.                SAVE, or QUIT.
  2053.  
  2054.           %    Neither capitalize nor cross-reference, regardless of whether the
  2055.                options to capitalize or cross-reference key words are in effect. 
  2056.                You may want to use this character to designate variables that
  2057.                you use frequently, but that you are not interested in
  2058.                cross-referencing--perhaps "i", "choice", "action", or "lineno".
  2059.  
  2060.           ()   If the *last* two characters in a key word are (), the key word
  2061.                will ordinarily have an initial capital letter in the formatted
  2062.                output.  The DB3WORDS.SNP file that comes with SNAP! uses this
  2063.                notation to designate the Tom Rettig key words (Tom Rettig is the
  2064.                author of a popular set of functions for dBASE III and Clipper).
  2065.  
  2066.      The following examples illustrate how to use these special characters:
  2067.  
  2068.           *note      --  This word will be ignored.
  2069.           !SAY       --  Capitalize, but do not cross-reference, SAY.
  2070.           @REPLACE   --  Include REPLACE in the cross-reference report.
  2071.  
  2072.                                           34
  2073.  
  2074.  
  2075.  
  2076.  
  2077.  
  2078.  
  2079.  
  2080.           %CHOICE    --  Do not capitalize or cross-reference this word.
  2081.           Alltrim()  --  This word is a function.  The first letter will be
  2082.                          capitalized.
  2083.  
  2084.      If this is a dBASE III or dBASE IV system, SNAP! allows you to restrict the
  2085.      cross-referencing to PUBLIC variables.  If you select this option, SNAP!
  2086.      only puts public variables on the report.  However, SNAP! does not look for
  2087.      PRIVATE statements that redefine the variable, so if a variable is declared
  2088.      PUBLIC anywhere in the system, SNAP! documents all subsequent occurrences
  2089.      of it.  Note that SNAP! does not "backtrack" to see if the variable was
  2090.      referenced before it was defined as PUBLIC.
  2091.  
  2092.      I have done my best to identify key words used in dBASE, FoxBASE, FoxPro
  2093.      and Clipper, but I may have missed some.  Fortunately, the DBxWORDS.SNP
  2094.      file is a standard ASCII file that you can edit with most any word
  2095.      processor. So, if I have omitted one of your favorite key words, it is a
  2096.      simple matter to add it to the file. Function names from other third-party
  2097.      libraries are also included, but you may also want to add function names
  2098.      from other development tools.
  2099.  
  2100.      A sample cross-reference report is included in the Appendix.
  2101.  
  2102.  
  2103.      LNK and MAKE files
  2104.  
  2105.      These options will be useful only to developers of Clipper-compiled
  2106.      applications.  If you are using interpretive dBASE III, dBASE IV or FoxPro
  2107.      you can ignore this section.
  2108.  
  2109.      Link Files.  SNAP! can produce a link file for PLINK86 (which comes with
  2110.      Clipper), TLINK (part of the Borland Turbo C package), and the Microsoft
  2111.      LINK utility.  If you are a serious Clipper programmer, the TLINK linker
  2112.      justifies the cost of the Turbo C package (less than $100)--it is that
  2113.      fast.  I have seen some informal benchmarks that show it linking
  2114.      applications as much as eight times faster than PLINK86.  
  2115.  
  2116.      PLINK86 will accept "commands" from a LNK file.  This file typically
  2117.      contains a series of commands for the linker, telling the linker such
  2118.      things as which libraries to search and in what order.  SNAP! will produce
  2119.      a LNK file if you select the appropriate option.  This LNK file will
  2120.      contain a list of all the files in your system.
  2121.  
  2122.      If you have a file named LINK.SNP in your source directory, SNAP! will put
  2123.      it at the top of the LNK file.  For example, you might put a list of
  2124.      libraries in this file.  You can also use a name other than 'LINK.SNP' by
  2125.      specifying /Lfilename on the command line.
  2126.  
  2127.      Make Files.  SNAP! can produce the files for the Clipper MAKE utility
  2128.      (Summer 87 version only) and for the Shareware NDMAKE program.
  2129.  
  2130.      MAKE is a standard UNIX (tm) utility, versions of which are now also
  2131.      available for MS-DOS.  MAKE allows you to define which files "depend" on
  2132.  
  2133.                                           35
  2134.  
  2135.  
  2136.  
  2137.  
  2138.  
  2139.  
  2140.  
  2141.      other files and only compile files that have changed. For example, in a
  2142.      Clipper application using MAKE, you would typically have one OBJ file for
  2143.      each PRG file.  Each OBJ file "depends" on the corresponding PRG file since
  2144.      the OBJ file needs to be remade when the PRG file changes.  In other words,
  2145.      when a change is made to a program file, it needs to be recompiled to
  2146.      create a new object file.  Similarly, the EXE file "depends" on all of the
  2147.      object files that are linked together to create it.
  2148.  
  2149.      MAKE allows you to specify these dependencies and perform the fewest
  2150.      recompiles to completely update your system for all program changes. It can
  2151.      save an enormous amount of time on the edit-compile-link-run cycle for a
  2152.      large system development.
  2153.  
  2154.      NDMAKE use three files--the MAKE.EXE file itself, a MAKE.INI file that
  2155.      specifies certain defaults, and a file named MAKEFILE that contains the
  2156.      dependencies for your system.  SNAP! can create the MAKEFILE.  It is up to
  2157.      you to deal with MAKE.INI.  In particular, you will need to add a default
  2158.      rule to your MAKE.INI file to tell MAKE how to compile a PRG file into an
  2159.      OBJ file.  Its syntax is:
  2160.  
  2161.      # To produce a `.obj' file from a `.prg' file using Clipper.
  2162.           .prg.obj:; clipper $< -m
  2163.  
  2164.      This definition should work with most versions of MAKE.  If you use a
  2165.      different MAKE utility, you may need to use slightly different syntax here. 
  2166.      Check your documentation to be sure.
  2167.  
  2168.      The SNAP! MAKE option works hand-in-hand with the LNK option.  If you ask
  2169.      SNAP! to create a LNK file, SNAP! will use the same file name when it
  2170.      create MAKEFILE.
  2171.  
  2172.      The net effect of all of this is that you can issue the command:
  2173.  
  2174.           MAKE filename   (where filename is the name of your TopFile)
  2175.  
  2176.      and MAKE will figure out what needs to be recompiled and linked to create
  2177.      your system.
  2178.  
  2179.      Sample LNK and MAKEFILE listings are included in appendix A.
  2180.  
  2181.  
  2182.      Batch Files
  2183.  
  2184.      SNAP! also produces DOS batch files to do useful things.  One file, named
  2185.      UPDATE.BAT, will copy all program files from the SNAP! output directory to
  2186.      the original source directory.  You could use it to copy the new
  2187.      (documented) versions of your source files over the original (undocumented)
  2188.      source files.  The syntax for UPDATE is:
  2189.  
  2190.           UPDATE d:
  2191.  
  2192.  
  2193.  
  2194.                                           36
  2195.  
  2196.  
  2197.  
  2198.  
  2199.  
  2200.  
  2201.  
  2202.      where d: is a drive or directory name.  If it is omitted, the original
  2203.      source directory is assumed.  Be careful with this file since it overwrites
  2204.      the original source code files.  You should backup your original files and
  2205.      review the new output files before executing UPDATE.  No kidding.  This is
  2206.      important.
  2207.  
  2208.      BACKPRG backs up the programs, format files and report forms in your
  2209.      system.  Its syntax is:
  2210.  
  2211.           BACKPRG d:
  2212.  
  2213.      d: is a drive or directory name and is required.  If you do not specify a
  2214.      target drive or directory, the batch file will complain and stop.
  2215.  
  2216.      BACKDBF backs up the databases, index files and memory files in your
  2217.      system.  Its syntax is:
  2218.  
  2219.           BACKDBF d:
  2220.  
  2221.      d: is a drive or directory name and is required.  If you do not specify a
  2222.      target drive or directory, the batch file will complain and stop.
  2223.  
  2224.      Macros are suppressed from this file.
  2225.  
  2226.      Also, SNAP! creates the PRINTDOC.BAT file to send all documentation files
  2227.      (not including source code or action diagrams) to the printer. PRINTDOC
  2228.      calls the DOS PRINT utility for background printing.  Thus, PRINT must be
  2229.      available somewhere on the path.
  2230.  
  2231.  
  2232.      Action Diagrams
  2233.  
  2234.      An action diagram documents the structure of a program by using graphical
  2235.      symbols to group related statements together.  By default, SNAP! uses the
  2236.      IBM extended ASCII characters in the action diagrams it prepares.
  2237.  
  2238.  
  2239.  
  2240.  
  2241.  
  2242.  
  2243.  
  2244.  
  2245.  
  2246.  
  2247.  
  2248.  
  2249.  
  2250.  
  2251.  
  2252.  
  2253.  
  2254.  
  2255.                                           37
  2256.  
  2257.  
  2258.  
  2259.  
  2260.  
  2261.  
  2262.  
  2263.      A portion of a sample action diagram follows:
  2264.  
  2265.  
  2266.      ┌─IF s_clipper .AND. s0_filt = 7
  2267.      │  ╔═DO WHILE .NOT. s0_userfilt
  2268.      │  ║    SKIP
  2269.      │  ║  ┌─IF EOF()
  2270.      │  ║  │    GOTO TOP
  2271.      │  ║  │  ╔═DO WHILE .NOT. &s0_userfilt
  2272.      │  ║  │  ║    SKIP
  2273.      │  ║  │  ║  ┌─IF EOF()
  2274.      │  ║  │  ║  │    SET FILTER TO
  2275.      │  ║  │  ║  │    s0_userfilt = "1=1"
  2276.      │  ║  │  ║  │    GOTO TOP
  2277.      │  ║  │  ^═══════LOOP
  2278.      │  ║  │  ║  │  ┌─IF Dusty Day In The Lake
  2279.      │  ║  │  ║  │  │    ? "Yell and Scream"
  2280.      <═══════════════════RETURN
  2281.      │  ║  │  ║  │  └─ENDIF
  2282.      │  ║  │  ║  └─ENDIF
  2283.      │  ║  │  ╚═ENDDO
  2284.      │  ║  │  ╒═DO CASE
  2285.      │  ║  │  ╞═CASE lastkey() = 4
  2286.      │  ║  │  │    choice = "F"
  2287.      │  ║  │  ╞═CASE lastkey() = 19
  2288.      │  ║  │  │    choice ="B"
  2289.      │  ║  │  ╘═ENDCASE
  2290.      │  ║  └─ENDIF
  2291.      │  ╚═ENDDO
  2292.      │  ╓─FOR i = 1 TO 25
  2293.      │  ║    DO sample1
  2294.      │  ╙─NEXT
  2295.      └─ENDIF
  2296.  
  2297.      As this example shows, different extended ASCII characters are used to
  2298.      differentiate different control structures.  Loops (DO WHILE, FOR, SCAN)
  2299.      use the double-line vertical bar, while conditional statements (IF, DO
  2300.      CASE) use a single vertical bar.
  2301.  
  2302.      The structures are distinguished further by the horizontal symbol used to
  2303.      connect the control structure key word with the vertical bar.
  2304.  
  2305.      Note also that these diagrams allow you to identify "unusual" loop exits
  2306.      such as LOOP and RETURN very easily.  I can often identify subtle,
  2307.      difficult-to-locate bugs by studying the action diagram for the program.
  2308.  
  2309.      SNAP! will identify certain syntax errors (such as a LOOP statement that is
  2310.      not within a DO WHILE loop) only if you choose to prepare action diagrams. 
  2311.      Certain error checking is only performed within this module.
  2312.  
  2313.      The Format screen allows you to choose whether to write action diagrams or
  2314.      not.  It also allows you to specify the extension that action diagram files
  2315.  
  2316.                                           38
  2317.  
  2318.  
  2319.  
  2320.  
  2321.  
  2322.  
  2323.  
  2324.      will have.  Action diagrams always have the same main file name (i.e, the
  2325.      first eight characters) as the source code file from which it is drawn, but
  2326.      the extension can be anything you specify except '.PRG'.  You can use the
  2327.      '?' character as a wildcard to match the corresponding characters in the
  2328.      original file extension.  Therefore, if you choose an action file extension
  2329.      of'??T', and your original source file was named FOO.BAR, the action
  2330.      diagram file will be named FOO.BAT (the BA is drawn from the original
  2331.      filename, and the T comes from the action diagram file mask).
  2332.  
  2333.      Action diagram files are very much like program files and have the same
  2334.      capitalization as the output program files do.  However, action diagram
  2335.      files are not directly executable or compilable because of the additional
  2336.      line-drawing characters they contain.
  2337.  
  2338.      Some printers (most Epson models, for example) do not support the IBM
  2339.      graphics characters very well.  If you want to print action diagrams, you
  2340.      may want to use other characters for the connections.  You can choose to
  2341.      prepare action diagrams using only ASCII symbols by choosing the ASCII
  2342.      symbol option on the source code and action diagram options screen.
  2343.  
  2344.      You can also choose your own action diagram symbols on the 'SourceCode and
  2345.      Action Diagram Options' screen.  The following chart shows how to customize
  2346.      the symbols:
  2347.  
  2348.         Default symbols: ─│┌└├═║╔╚^v═│╒╘╞─║╓╙<═
  2349.  
  2350.                Position: 0000000001111111111222
  2351.                          1234567890123456789012
  2352.  
  2353.                Position                              Symbol
  2354.                -------- -----------------------------------------------------
  2355.                    1      Horizontal symbol used for IF/ELSE/ENDIF structures
  2356.                    2      Vertical symbol used for IF/ELSE/ENDIF structures
  2357.                    3      Corner for IF and BEGIN SEQUENCE (Clipper only)
  2358.                    4      Corner for ENDIF and END (Clipper only)
  2359.                    5      Join symbol for ELSE
  2360.                    6      Horizontal symbol used for DO WHILE/ENDDO structures
  2361.                    7      Vertical symbol used for DO WHILE/ENDDO structures
  2362.                    8      Corner for DO WHILE
  2363.                    9      Corner for ENDDO
  2364.                   10      Symbol for LOOP
  2365.                   11      Symbol for EXIT and BREAK (Clipper only)
  2366.                   12      Horizontal symbol used for DO CASE/OTHERWISE/ENDCASE
  2367.                           structures
  2368.                   13      Vertical symbol used for DO CASE/OTHERWISE/ENDCASE
  2369.                           structures
  2370.                   14      Corner for DO CASE
  2371.                   15      Corner for ENDCASE
  2372.                   16      Join symbol for CASE and OTHERWISE
  2373.                   17      Horizontal symbol used for FOR/NEXT structures
  2374.                   18      Vertical symbol used for FOR/NEXT structures
  2375.                   19      Corner for FOR
  2376.  
  2377.                                              39
  2378.  
  2379.  
  2380.  
  2381.  
  2382.  
  2383.  
  2384.  
  2385.                   20      Corner for NEXT
  2386.                   21      Arrow symbol for RETURN/CANCEL/QUIT
  2387.                   22      Horizontal symbol used for RETURN/QUIT/LOOP/EXIT
  2388.  
  2389.      You can replace any of these symbols with others of your choosing. If you
  2390.      want to restore the default set, simply select 'G' for graphics characters,
  2391.      move to another input screen, then come back again (in simpler terms,
  2392.      select 'G', press Ctrl-PgDn then Ctrl-PgUp). These symbols are reset when
  2393.      the 'Source Code and Action Diagrams Options' screen is presented.  One
  2394.      consequence is that you must answer 'O' (for Other Symbols) to be able to
  2395.      change the action diagram symbols. If you answer 'G', then change the
  2396.      symbols, the changes will not take effect.  Like other input fields, any
  2397.      user-defined symbols will be saved in the configuration file so you do not
  2398.      have to enter them at each invocation of SNAP!
  2399.  
  2400.      The SCAN/ENDSCAN control structure is documented with the same symbols as
  2401.      the DO WHILE loop.  The BEGIN SEQUENCE/BREAK/END control structure is
  2402.      diagrammed with the same symbols as an IF/ENDIF structure.
  2403.  
  2404.  
  2405.      Source Code Printout
  2406.  
  2407.      When you have completed your program, you will probably want a listing of
  2408.      the source code to accompany the rest of your documentation.  SNAP!
  2409.      provides a facility for formatting and printing dBASE source code files
  2410.      and/or action diagrams, and gives you a great deal of control over source
  2411.      code format.  You can set the following parameters:
  2412.  
  2413.           Line width
  2414.           Page length
  2415.           Left and right margins
  2416.           Top and bottom margins
  2417.           Spaces per tab
  2418.           Include or suppress line numbers
  2419.           Printer setup string
  2420.  
  2421.      For example, you can set these values to leave plenty of room on the left
  2422.      side of the page so that your code will fit in a 3-ring binder.
  2423.  
  2424.      If a line of code exceeds the line width minus left and right margins,
  2425.      SNAP! will wrap it on the printout without messing up the page breaks. 
  2426.      SNAP! also appropriately counts the wrapped line as one source code line,
  2427.      so that your cross-reference report still matches the printout.
  2428.  
  2429.      Each page of the printout contains a header showing the program name,
  2430.      system name, copyright notice, page number and date/time printed.  The
  2431.      programs are printed in alphabetical order.
  2432.  
  2433.      Line numbers are never added to an action diagram at print time. If you
  2434.      would like action diagrams to be printed with line numbers, choose the
  2435.      option on the format screen to add the line numbers directly to the action
  2436.      diagram file.  This is the default choice, so you ordinarily get action
  2437.  
  2438.                                           40
  2439.  
  2440.  
  2441.  
  2442.  
  2443.  
  2444.  
  2445.  
  2446.      diagrams (and printouts) with line numbers.  The restriction on adding line
  2447.      numbers at print time prevents duplicate line numbers from being printed.
  2448.  
  2449.      The print section of SNAP! deals harshly with nonsense. For example, if the
  2450.      sum of your left and right margins exceeds your line width, SNAP! will set
  2451.      the line width and the margins to their default values.  Similarly, SNAP!
  2452.      will reject top and bottom margins greater than page length, negative
  2453.      values, tab expansions greater than 12 spaces, and so on.
  2454.  
  2455.      SNAP! prints a three-line heading on each page of the printout, showing
  2456.      program name, system name, copyright holder, date, time, and page number. 
  2457.      The heading begins on the line immediately following the top margin you
  2458.      specify.  Accordingly, if you use a top margin of 8 and a bottom margin of
  2459.      8, with 66-line paper only 47 lines of code will be printed on each page 
  2460.      (66 lines - 8 top margin - 8 bottom margin - 3 heading).
  2461.  
  2462.      For those of you with HP LaserJet II printers, try the following
  2463.      parameters:
  2464.           Line width:  132             Page length:   80
  2465.           Top margin:    4             Bottom margin:  4
  2466.           Left margin:   8             Right margin:   1
  2467.  
  2468.      Setup string: \027E\027&l0o8D\027(10U\027(s16.6H
  2469.  
  2470.      The \027E at the beginning of the string resets the printer.  These
  2471.      parameters are stored in the printer definition file (see below for more
  2472.      details) and you do not have to type them in yourself.
  2473.  
  2474.      SNAP! allows you to enter a setup string to configure the printer for SNAP!
  2475.      (see above) and also a reset string to configure the printer after SNAP!
  2476.      has completed printing.  You would not ordinarily need to enter a reset
  2477.      string, but you might enter one if you wanted SNAP! to leave the printer
  2478.      configured in a particular way.
  2479.  
  2480.      When you are in the print options screen, you can press "F2--List" to
  2481.      display a scrollable list of printer defaults.  If you select one of the
  2482.      printers shown, the choices associated with it are used to update the print
  2483.      options parameters, such as setup string, line width, page length and so
  2484.      forth.  This feature means that you don't have to remember complicated
  2485.      control strings.  You can define them in the print options file and select
  2486.      them from the list.
  2487.  
  2488.      The printer options are stored in SNAPPRT.SNP.  It is an ASCII file that
  2489.      you can edit to add more printer definitions.  Descriptions for how to add
  2490.      a printer are included at the top of SNAPPRT.SNP itself.
  2491.  
  2492.      You can force a page break by including the *# SNAP FORMFEED directive at
  2493.      the point in your source code where you would like a new page to start. 
  2494.      You could also just embed a CHR(12) character in the file, but SNAP! will
  2495.      keep the page numbers straight if you use the "*# SNAP FORMFEED" approach. 
  2496.      Note that the formfeed directive itself is not printed.
  2497.  
  2498.  
  2499.                                           41
  2500.  
  2501.  
  2502.  
  2503.  
  2504.  
  2505.  
  2506.  
  2507.      By default, SNAP! prints to LPT1:  You can direct output to a different
  2508.      port or to a disk file by using the /P command line switch.  For example,
  2509.           SNAP /PLPT2:
  2510.      sends output to LPT2:
  2511.           SNAP /Pmyfile.txt
  2512.      sends output to a file named "myfile.txt".  If you are printing over a
  2513.      network, you may need to relax the timing conventions that SNAP! uses to
  2514.      tell that the printer is working correctly.  If you see timeout or "printer
  2515.      not ready" messages, try this:
  2516.           SNAP /PLPT1:(NET)
  2517.       
  2518.  
  2519.      Printing Without Documenting (Reprinting)
  2520.  
  2521.      You can use the source code printing facilities of SNAP! without going
  2522.      through the full time-consuming documentation process.  If you press the
  2523.      "F9--Print Now" key while viewing the Print screen, SNAP! will prompt you
  2524.      for a filename containing the names of files to print. SNAP! searches the
  2525.      file you name and prints the contents of the files listed therein.  SNAP!
  2526.      will not print a file with an extension of MEM, FRM, DBF, NDX, NTX, IDX,
  2527.      MDX, EXE, COM and other common non-ASCII X-Base names.  Also, SNAP! tries
  2528.      to figure out if a particular file is not an ASCII file and warn you about
  2529.      it before printing.
  2530.  
  2531.      SNAP! will not try to print from anything that isn't a filename, so the
  2532.      file you specify can contain all sorts of garbage without causing a
  2533.      problem.  The main effect of all this is that you can give the Print
  2534.      routines the name of a SNAP! REPRINT.DOC file and it will print all the
  2535.      source code in the system without going through the full SNAP!
  2536.      documentation process again.  Of course, you can create your own file
  2537.      containing filenames to print also.  You can also use this feature (and the
  2538.      DOCLIST.DOC file--just like REPRINT.DOC except it holds the names of
  2539.      documentation files instead of source code files) to print documentation
  2540.      files in a nicely formatted way.
  2541.  
  2542.  
  2543.  
  2544.  
  2545.  
  2546.  
  2547.  
  2548.  
  2549.  
  2550.  
  2551.  
  2552.  
  2553.  
  2554.  
  2555.  
  2556.  
  2557.  
  2558.  
  2559.  
  2560.                                           42
  2561.  
  2562.  
  2563.  
  2564.  
  2565.  
  2566.  
  2567.  
  2568.  
  2569.                           Using SNAP! in a Batch Environment
  2570.  
  2571.      If you have several systems to document, you may wish to set up a batch
  2572.      file to invoke SNAP! with the appropriate parameters for each system so
  2573.      that you can come back in a week or two and find all your programs
  2574.      beautifully documented.  SNAP! supports Immediate Mode for batch
  2575.      documentation through the /X switch on the command line.  Used in
  2576.      conjunction with named configuration and macro files, you can sequentially
  2577.      document a series of dBASE systems.  SNAP! will take its input from the
  2578.      configuration files (or from CONFIG.SNP if no configuration file is named)
  2579.      and begin documenting the system immediately.  Note that you have to have
  2580.      your configuration file ready before you invoke the system.  If you do not
  2581.      specify a configuration file, SNAP! tries to use CONFIG.SNP in the current
  2582.      directory.
  2583.  
  2584.      For example, to document three dBASE systems without pausing for user
  2585.      input, set up a batch file with these lines:
  2586.  
  2587.           SNAP /x /fsystem1.snp
  2588.           SNAP /x /fsystem2.snp
  2589.           SNAP /x
  2590.  
  2591.      SNAP! will document the first system and take input from the SYSTEM1.SNP
  2592.      configuration file.  Then, without prompting for further user action, it
  2593.      will read SYSTEM2.SNP and begin documenting the second system.  Input for
  2594.      the third system is in the CONFIG.SNP (default name) file.  When the batch
  2595.      file is invoked, SNAP! will begin documenting and will not pause for user
  2596.      input at any point in the process.
  2597.  
  2598.      If an error occurs anywhere during the processing of these three systems,
  2599.      SNAP! will display an error message and stop documenting the system that
  2600.      experienced the error.  The batch file, however, will continue running and
  2601.      will move on to the next system to be documented.
  2602.  
  2603.  
  2604.  
  2605.  
  2606.  
  2607.  
  2608.  
  2609.  
  2610.  
  2611.  
  2612.  
  2613.  
  2614.  
  2615.  
  2616.  
  2617.  
  2618.  
  2619.  
  2620.  
  2621.                                           43
  2622.  
  2623.  
  2624.  
  2625.  
  2626.  
  2627.  
  2628.  
  2629.                                      Random Notes
  2630.  
  2631.      These are some other thoughts that don't seem to fit anywhere else.
  2632.  
  2633.      If you have a file named HELP.PRG in the program directory, SNAP! assumes
  2634.      this must be a Clipper system, where 'HELP' is a magic name and documents
  2635.      the program accordingly.  SNAP! treats HELP.PRG as if it were called
  2636.      directly from TopFile.
  2637.  
  2638.  
  2639.  
  2640.  
  2641.  
  2642.  
  2643.  
  2644.  
  2645.  
  2646.  
  2647.  
  2648.  
  2649.  
  2650.  
  2651.  
  2652.  
  2653.  
  2654.  
  2655.  
  2656.  
  2657.  
  2658.  
  2659.  
  2660.  
  2661.  
  2662.  
  2663.  
  2664.  
  2665.  
  2666.  
  2667.  
  2668.  
  2669.  
  2670.  
  2671.  
  2672.  
  2673.  
  2674.  
  2675.  
  2676.  
  2677.  
  2678.  
  2679.  
  2680.  
  2681.  
  2682.                                           44
  2683.  
  2684.  
  2685.  
  2686.  
  2687.  
  2688.  
  2689.  
  2690.                                  Program Limitations
  2691.                              and Things To Watch Out For
  2692.  
  2693.      SNAP! had the following design limitations when this documentation was
  2694.      written:
  2695.  
  2696.      Maximum program files:             1024 programs, procedures and functions
  2697.      Maximum other files:                128 of each type (e.g.databases)
  2698.      Maximum variables:                 2500 throughout the system
  2699.      Maximum key words:                 1600 words
  2700.      Maximum length of key word:          15 characters
  2701.      Maximum length of a token:           20 characters
  2702.      Maximum levels of program nesting:   20  levels
  2703.      Maximum number of database fields: 2048 throughout the system
  2704.      Maximum length of filename:          67 characters (including path)
  2705.  
  2706.      These limitations were current when this documentation was written.  You
  2707.      can verify them (it would be a good idea) by viewing the program
  2708.      limitations screen (Press F1 three times from the greeting screen).
  2709.  
  2710.      SNAP! uses about 210K of memory as "overhead."  This much is used as soon
  2711.      as the program is invoked.  It also allocates additional memory dynamically
  2712.      as it is needed.  It is a memory hog and will probably not be of much use
  2713.      if you don't have 640K.  SNAP! will put its overlay file into expanded
  2714.      memory (if enough is available) to speed things up, but will not otherwise
  2715.      take advantage of any memory above 640K.  I hope to change this in the
  2716.      future.
  2717.  
  2718.      SNAP! does not format FoxPro 2.0 code snippets.  Use the SNIPFMT program
  2719.      that accompanies FoxPro 2.0 for that.  It also does not document
  2720.      Clipper 5.0 code blocks.
  2721.  
  2722.  
  2723.      Legal Coding that is Prohibited by SNAP!
  2724.  
  2725.      I make no promises about what will happen if you run SNAP! against invalid
  2726.      X-Base syntax, but predict that the results will not be satisfying.  On the
  2727.      other hand, there are some "legal" coding techniques for X-Base that cause
  2728.      problems with SNAP!.  I have tried to keep these to a minimum, but some yet
  2729.      remain.
  2730.  
  2731.      You cannot use the word "END" as a variable in an assignment statement of
  2732.      the form:
  2733.           END = foo.
  2734.      SNAP! sees the 'END' (which is a valid control structure terminator in
  2735.      Clipper), treats anything else on the line as a comment, and becomes
  2736.      powerfully confused.  Using "END" in a: 
  2737.           STORE foo TO end
  2738.      statement is acceptable.  You also cannot use PROCEDURE or FUNCTION (or a
  2739.      valid abbreviation of either) as a variable name.
  2740.  
  2741.  
  2742.  
  2743.                                           45
  2744.  
  2745.  
  2746.  
  2747.  
  2748.  
  2749.  
  2750.  
  2751.      SNAP! does not track control structures across program or procedure
  2752.      boundaries.  Normally, this is not a problem since you cannot start a DO
  2753.      WHILE loop in one program and finish it in another.  However, a BREAK
  2754.      statement can be in one program, while the loop it is breaking out of is in
  2755.      another file.  Thus, SNAP! does not report an error when it sees a BREAK
  2756.      statement, even if it cannot tell whether there is a loop for the BREAK to
  2757.      apply to.
  2758.  
  2759.      Hyphens in Filenames
  2760.  
  2761.      SNAP! uses treats a hyphen as a delimiter when it is scanning your source
  2762.      code to prepare the cross-reference report, since the hyphen usually means
  2763.      "subtract."  Thus, foo = bar-baz will correctly generate three
  2764.      cross-references--one for "foo", one for "bar" and one for "baz".  This
  2765.      technique breaks down when SNAP! sees "DO foo-bar."  In this case, both
  2766.      "foo" and "bar" will be cross-referenced.  Note that SNAP! will find the
  2767.      right file and continue documenting--it is only the cross-reference report
  2768.      that is misleading.
  2769.  
  2770.  
  2771.      Multiple Procedure Files
  2772.  
  2773.      If you use multiple procedure files and if they contain procedures that
  2774.      have the same name, SNAP! may document your system incorrectly.  SNAP! 5.0
  2775.      should be much better than previous versions about keeping these files
  2776.      straight, but it is probably still possible to confuse SNAP!.  
  2777.  
  2778.      For example, assume you have two procedure files that are SET at different
  2779.      points in the system.  Both files contain a procedure called FOO, but FOO
  2780.      is not the same in each file.  When SNAP! searches for procedures, it will
  2781.      always find the first FOO and assume it is the one being called.  SNAP!
  2782.      does not track which procedure file is currently active and cannot
  2783.      distinguish between identically-named procedures in different procedure
  2784.      files.  This limitation has no effect on systems that use only one
  2785.      procedure file, or on systems that have multiple procedure files each
  2786.      containing uniquely-named procedures.
  2787.  
  2788.      Giving different things the same name (this is my other brother Daryl) is a
  2789.      bad programming habit to get into.  It is a good idea to use unique names
  2790.      for each procedure, function, procedure file and program.
  2791.  
  2792.  
  2793.      Suppressing Color
  2794.  
  2795.      If you do not like the colors I selected, or if they do not display
  2796.      properly on your monitor, putting the "/BW" switch on the command line will
  2797.      disable color.
  2798.  
  2799.  
  2800.  
  2801.  
  2802.  
  2803.  
  2804.                                           46
  2805.  
  2806.  
  2807.  
  2808.  
  2809.  
  2810.  
  2811.  
  2812.                                     Change History
  2813.  
  2814.      SNAP! has undergone several major changes.  The following list is not
  2815.      all-inclusive, but does hit the high points.
  2816.  
  2817.  
  2818.      Changes From Version 4.0 to Version 5.0
  2819.  
  2820.      I've moved.  If you need to reach me, CompuServe is still the best bet.  My
  2821.      user ID is 74025,514.  My mailing address has changed since the past
  2822.      version, however, and is shown below.
  2823.  
  2824.      No more "line too long."  SNAP! can now handle lines of arbitrary length,
  2825.      so long as no single physical line exceeds 255 characters.  You can combine
  2826.      as many 255-character lines as you want with continuation characters.  
  2827.  
  2828.      Local Cross References and Memory Conservation.  Version 5.0 allows you to
  2829.      create "local" cross reference reports--cross references for each program
  2830.      and procedure file.  Local cross references use very little memory.  If you
  2831.      use local cross references, you should be able to document much larger
  2832.      systems.  For example, I had no trouble documenting a 50,000+ line SBT
  2833.      payroll system with local cross references on.  Note that local cross
  2834.      references and the regular global cross references are mutually exclusive.
  2835.  
  2836.      Multiple directories.  You can document programs and data files in multiple
  2837.      directories.  The top file screen prompts you for one directory for
  2838.      programs and another one for data, but you can have up to 25 program
  2839.      directories and 25 data directories.  You define new directories with the 
  2840.           *# SNAP DATAPATH directory-path
  2841.      and
  2842.           *# SNAP PRGPATH directory-path
  2843.      directives.
  2844.  
  2845.      Sending printer output to a file.  With SNAP! 5.0, you can send printer
  2846.      output to any device, including a file or an output port (e.g., COM2:).
  2847.  
  2848.      Comment alignment.  You can instruct SNAP! to align "&&" comments on a
  2849.      particular column so that they all line up nicely.
  2850.  
  2851.      Heading Options.  You can specify the items to include in a heading.  For
  2852.      example, you can include "Called by" and exclude "Calls".
  2853.  
  2854.  
  2855.      Changes From Version 3.0 to Version 4.0
  2856.  
  2857.      Speed.  Version 4.0 is about 25% faster than version 3.0 if you have enough
  2858.      EMS memory to hold the 210K overlay.  If not, the speed of versions 4.0 and
  2859.      3.0 will be approximately equal.
  2860.  
  2861.      Memory Capacity.  Version 4.0 uses program overlays to increase the amount
  2862.      of memory available for cross referencing.  You will ordinarily get about
  2863.      50K more memory with 4.0.
  2864.  
  2865.                                           47
  2866.  
  2867.  
  2868.  
  2869.  
  2870.  
  2871.  
  2872.  
  2873.      Dialect Support.  SNAP! 4.0 now supports dBASE IV and FoxPro, as well as
  2874.      all of the previously-supported variants of the X-Base language.
  2875.  
  2876.      Mouse Support.  SNAP! 4.0 now fully supports mousing.  You can use the
  2877.      mouse to position the cursor, select function keys, and do pretty much
  2878.      everything else you would expect.
  2879.  
  2880.      Report Form and Label Documentation.  If you are using dBASE IV, SNAP! will
  2881.      automatically document the FRG and LBG files that dBASE IV produces.  These
  2882.      files are very much like program files and contain the code to implement
  2883.      the reports or labels you have defined.  SNAP! will include these files in
  2884.      the "CALLS" lists in the headings and will also include them in the tree
  2885.      diagram if you have set the tree options to display them.  SNAP! does not
  2886.      produce the full report form documentation for these files.
  2887.  
  2888.      UDF Recognition.  The code for detecting calls to user defined functions
  2889.      (UDFs) has been extensively revised and should now detect nearly all calls
  2890.      to UDFs, even the sneaky and underhanded ones.  For example, SNAP! now
  2891.      detects UDF calls from MEMOEDIT, DBEDIT and ACHOICE in Clipper
  2892.      applications, as well as a host of other, special, UDF situations.
  2893.  
  2894.      Documentation of Other Files.  Version 4.0 now tracks "other" files--files
  2895.      that don't fit into any of the categories such as databases, index files,
  2896.      etc.  Examples of other files include text files that are appended into
  2897.      memo fields, output files from "SET PRINTER TO foo.txt" statements and so
  2898.      forth.
  2899.  
  2900.      Printer Definition File.  SNAP! 4.0 now is distributed with a printer
  2901.      definition file, SNAPPRT.SNP, that contains parameters for some common
  2902.      printers.  It is an ASCII file and you can add new printers (or variants of
  2903.      existing printers) to the list.
  2904.  
  2905.      Parameters.  SNAP! now displays function and procedures parameters, if any,
  2906.      in the procedure summary.  Each procedure or function that takes a
  2907.      parameter will have the parameter line displayed next to the function name
  2908.      in the Procedures Summary report.
  2909.  
  2910.      Page breaks.  You can now use the "*# SNAP FORMFEED" directive to force a
  2911.      page break at a specific spot in the source code.  The "*# SNAP FORMFEED"
  2912.      directive itself is not printed.
  2913.  
  2914.      Program Narratives.  SNAP! 4.0 supports program narratives if they start
  2915.      with "*)" and echoes them to the HEADINGS.DOC file, suitable for use as a
  2916.      cover page for each source code file.
  2917.  
  2918.      Third-Party Libraries.  SNAP! 4.0 is distributed with a set of key words
  2919.      for several popular third-party function libraries.  You can instruct SNAP!
  2920.      to treat these key words as if they were part of the language, which
  2921.      improves SNAP!'s handling of capitalization, formatting and other aspects
  2922.      of your documentation.
  2923.  
  2924.  
  2925.  
  2926.                                           48
  2927.  
  2928.  
  2929.  
  2930.  
  2931.  
  2932.  
  2933.  
  2934.      PERSONAL.KEY.  You can now create a file with your own set of key words. 
  2935.      "PERSONAL.KEY" is a magic name--SNAP! searches for it in the SNAP!
  2936.      subdirectory and adds anything it finds in it to the key words list.
  2937.  
  2938.      "*# INCLUDE" key words.  You can add a "*# INCLUDE foo" statement to
  2939.      DB4WORDS.SNP or PERSONAL.KEY to include other key words files, such as the
  2940.      third-party function library key words described above.
  2941.  
  2942.      Control Structure commenting.  Version 4.0 also allows you to add comments
  2943.      to the ends of control structures such as IF/ENDIF and CASE/ENDCASE.  For
  2944.      example, you can instruct SNAP! to add the IF condition after each ENDIF.
  2945.          IF foo = bar
  2946.             DO this
  2947.          ENDIF (foo = bar)    <-- SNAP! adds the "(foo = bar)"
  2948.  
  2949.      Reprinting source code.  You can now run SNAP!, exit the program without
  2950.      printing source code, and use the "F9--print now" option to print the
  2951.      source code later.  SNAP! now creates a REPRINT.DOC file that contains the
  2952.      names of all programs, procedures, action files and other files that are
  2953.      printed with source code.  Prior to version 4.0 it was difficult to print
  2954.      source code if you did not do it during the SNAP! documentation run.  In
  2955.      addition, SNAP! creates the DOCLIST.DOC file that contains the names of
  2956.      documentation files.  You can also use F9 to print these files.
  2957.  
  2958.      Changes From Version 2.0 to Version 3.0 
  2959.  
  2960.      Speed.  Version 3.0 is be approximately 2.5 times as fast as version 2.0. 
  2961.      The more procedures you use, the faster it will be. SNAP! 2.0 was
  2962.      particularly inefficient in documenting procedures.
  2963.  
  2964.      Source Code Printing.  You can now use the source code printing routines
  2965.      without going through the entire documentation process. When you press the
  2966.      right function key, it asks for a filename. SNAP! searches this file for
  2967.      other filenames, which it then prints.
  2968.  
  2969.      User Interface.  The user interface has gotten an interface-lift <guffaw>
  2970.      since the last version.  The number of option screens grew too large to be
  2971.      conveniently browsed with the facilities in version 2.  Version 3 now
  2972.      organizes all the screens underneath a main menu.  You can also select menu
  2973.      items with Alt-key combinations, without having to deal with the menu
  2974.      itself.
  2975.  
  2976.      Memory Usage.  SNAP! 3.0 uses some additional dynamic data structures to
  2977.      minimize wasted space.  Under normal circumstances, it should roughly
  2978.      triple the size of the application that can be accommodated by the system. 
  2979.      In addition, after the conversion to Turbo Pascal 4.0, the size of the
  2980.      program itself shrank by about 20%.
  2981.  
  2982.      New Reports.  A system summary is now available to show: 
  2983.         Lines of code
  2984.           Database and index names
  2985.           Number of program files
  2986.  
  2987.                                           49
  2988.  
  2989.  
  2990.  
  2991.  
  2992.  
  2993.  
  2994.  
  2995.           Number of procedures
  2996.         . . . and lots of other summary information.
  2997.  
  2998.      Arrays are recognized in the cross-reference report and are denoted with
  2999.      brackets (for Clipper) or parentheses (for FoxBASE), as appropriate (e.g.,
  3000.      FOO[100] or FOO(100,50) ), with the declared size shown.  The
  3001.      cross-reference report also lists public variables, macros and arrays
  3002.      separately.
  3003.  
  3004.      The report form documentation has been revised extensively (dBASE III
  3005.      only).  It now shows each of the fields in the report, displays the report
  3006.      heading, etc.  Similar documentation is now available for label forms,
  3007.      which were ignored entirely by SNAP! version 2.0.)
  3008.  
  3009.      The database summary now includes start and end columns for each field. 
  3010.      Alias names are now usually shown with the appropriate physical database
  3011.      file in the database summary, file heading, tree, etc.
  3012.  
  3013.      Link files can now be created for PLINK86, Turbo C TLINK, or the Microsoft
  3014.      LINK program.  Make files continue to support NDMAKE and now also support
  3015.      the Clipper MAKE utility.
  3016.  
  3017.      File headings and may other reports show the date and time of last change,
  3018.      based on the file date/time stamp.
  3019.  
  3020.      Additional Options
  3021.  
  3022.      Here are some of the new things you can control: 
  3023.           Suppression of blank lines in output file
  3024.           Suppression of comments in output file
  3025.           Optional extra indent under DO CASE statement 
  3026.           Inclusion of DBF, NDX, MEM, FRM and LBL files in the tree 
  3027.           Capitalization of key words
  3028.           Capitalization of tokens
  3029.           Temporary suspension of cross-referencing and formatting
  3030.           Leave the file date/time stamp unchanged
  3031.           Separate directories for programs and databases
  3032.  
  3033.      Changes Since SNAP! Version 1.0
  3034.  
  3035.      Practically everything.
  3036.  
  3037.  
  3038.  
  3039.  
  3040.  
  3041.  
  3042.  
  3043.  
  3044.  
  3045.  
  3046.  
  3047.  
  3048.                                           50
  3049.  
  3050.  
  3051.  
  3052.  
  3053.  
  3054.  
  3055.  
  3056.                              Some Administrative Matters
  3057.  
  3058.      Version Numbers
  3059.  
  3060.      In the past, I have sometimes been criticized for releasing one or more
  3061.      "maintenance" versions shortly after a major update.  I am guilty, but
  3062.      unrepentant.  In an attempt to be responsive to user suggestions and bug
  3063.      reports, I will continue to add features and fix bugs as they are reported. 
  3064.      When the resulting minor changes are uploaded, the SNAP! version will
  3065.      include a letter (e.g., SNAP! version 4.00 will change to 4.00a).  In this
  3066.      example, if you have version 4.00, don't worry about downloading another
  3067.      version before 4.1 unless you need the specific features in the intervening
  3068.      versions.
  3069.  
  3070.  
  3071.      Updates and New Versions
  3072.  
  3073.      SNAP! is available on CompuServe.  At the time this documentation file was
  3074.      written, copies are available on the Fox (GO FOXFORUM) and Nantucket (GO
  3075.      NANFORUM) forums.
  3076.  
  3077.      Rather than download the large SNAP! files, you may prefer to send me a
  3078.      blank, formatted diskette (either 3.5 or 5.25 inch, but 3.5 takes longer)
  3079.      and a postage-paid diskette mailer, and I will send you the most current
  3080.      version.  My address is:
  3081.           Walter J. Kennamer
  3082.           7027 Dunstans Lane
  3083.           Toledo, Ohio   43617
  3084.  
  3085.      If you want me to supply the mailers, disks and postage, please enclose a
  3086.      check for $25.  This high figure is ostensibly for postage and handling,
  3087.      but is really for putting me to the trouble of buying mailers, disks and
  3088.      stamps.  I prefer programming to managing a mailing effort, so I will do
  3089.      the former cheaply but the latter only for a price.
  3090.  
  3091.  
  3092.      How to Get Support
  3093.  
  3094.      My CIS ID is 74025,514.  I log on nearly every day, except when I am
  3095.      traveling.  I am easiest to reach through CompuServe mail, but I also check
  3096.      in on the Fox, Ashton-Tate, and Nantucket Forums periodically.  If you have
  3097.      any suggestions about how to improve SNAP! or if you have encountered a
  3098.      bug, please let me know.
  3099.  
  3100.      My job requires me to travel frequently, and I am usually hard to reach by
  3101.      telephone.  You will probably have better success reaching me through
  3102.      CompuServe or by mail.
  3103.  
  3104.  
  3105.  
  3106.  
  3107.  
  3108.  
  3109.                                           51
  3110.  
  3111.  
  3112.  
  3113.  
  3114.  
  3115.  
  3116.  
  3117.      Association of Shareware Professionals
  3118.  
  3119.      I am a member of the Association of Shareware Professionals (ASP).  ASP
  3120.      wants to make sure that the shareware principle works for you.  If you are
  3121.      unable to resolve a shareware-related problem with an ASP member by
  3122.      contacting the member directly, ASP may be able to help.  The ASP Ombudsman
  3123.      can help you resolve a dispute or problem with an ASP member, but does not
  3124.      provide technical support for members' products.  Please write to the ASP
  3125.      Ombudsman at P.O. Box 5786, Bellevue, WA  98006 or send a CompuServe
  3126.      message via Easyplex to ASP Ombudsman 70007,3536.
  3127.  
  3128.  
  3129.  
  3130.  
  3131.  
  3132.  
  3133.  
  3134.  
  3135.  
  3136.  
  3137.  
  3138.  
  3139.  
  3140.  
  3141.  
  3142.  
  3143.  
  3144.  
  3145.  
  3146.  
  3147.  
  3148.  
  3149.  
  3150.  
  3151.  
  3152.  
  3153.  
  3154.  
  3155.  
  3156.  
  3157.  
  3158.  
  3159.  
  3160.  
  3161.  
  3162.  
  3163.  
  3164.  
  3165.  
  3166.  
  3167.  
  3168.  
  3169.  
  3170.                                           52
  3171.  
  3172.  
  3173.  
  3174.  
  3175.  
  3176.  
  3177.  
  3178.                                    Acknowledgements
  3179.  
  3180.      Special thanks to Andy Walsh for writing several string procedures in
  3181.      assembly language for me.  Thanks to Peter Petto, Paul Ferrara and everyone
  3182.      else who helped me develop and debug SNAP!  Thanks to Pat Adams for public
  3183.      relations.  Thanks to Charles S. Galloway, for nagging me to do what I know
  3184.      I ought to.  He has contributed a great deal to SNAP! 5.0.
  3185.  
  3186.      Thanks to all the beta testers who helped so much with handling the last-
  3187.      minute details.  I used to mention them separately.  I don't anymore,
  3188.      though, so that they are not blamed for any of the last-minute details that
  3189.      turn out not to have been handled after all.  They know who they are.
  3190.  
  3191.  
  3192.  
  3193.  
  3194.  
  3195.  
  3196.  
  3197.  
  3198.  
  3199.  
  3200.  
  3201.  
  3202.  
  3203.  
  3204.  
  3205.  
  3206.  
  3207.  
  3208.  
  3209.  
  3210.  
  3211.  
  3212.  
  3213.  
  3214.  
  3215.  
  3216.  
  3217.  
  3218.  
  3219.  
  3220.  
  3221.  
  3222.  
  3223.  
  3224.  
  3225.  
  3226.  
  3227.  
  3228.  
  3229.  
  3230.  
  3231.                                           53
  3232.  
  3233.  
  3234.  
  3235.  
  3236.  
  3237.  
  3238.  
  3239.  
  3240.                              Appendix A -- Sample Reports
  3241.  
  3242.      The following sample reports illustrate the formats of some SNAP! output. 
  3243.      Since the documentation for a full system is voluminous, only limited
  3244.      portions of the documentation are presented here. This saves much space,
  3245.      but has the disadvantage of making some reports "out of sync."  Thus, the
  3246.      internal consistency of a complete package of documentation is missing
  3247.      here.  For example, if you try to trace the entries in the tree back to
  3248.      TODO.PRG, you will discover that they don't track since I trimmed out much
  3249.      of TODO.PRG so as to reduce the bulk of the documentation file. Similarly,
  3250.      the system summary shows a lot of databases that aren't in the DATADICT.DOC
  3251.      file.
  3252.  
  3253.      Of course, the best way to see sample SNAP! reports is to run it on some of
  3254.      your own programs.
  3255.  
  3256.  
  3257.  
  3258.  
  3259.  
  3260.  
  3261.  
  3262.  
  3263.  
  3264.  
  3265.  
  3266.  
  3267.  
  3268.  
  3269.  
  3270.  
  3271.  
  3272.  
  3273.  
  3274.  
  3275.  
  3276.  
  3277.  
  3278.  
  3279.  
  3280.  
  3281.  
  3282.  
  3283.  
  3284.  
  3285.  
  3286.  
  3287.  
  3288.  
  3289.  
  3290.  
  3291.  
  3292.                                           54
  3293.  
  3294.  
  3295.  
  3296.  
  3297.  
  3298.  
  3299.  
  3300.  
  3301.        *:*********************************************************************
  3302.        *:
  3303.        *:        Program: TODO.PRG
  3304.        *:
  3305.        *:         System: ToDo -- To Do Management System
  3306.        *:         Author: Walter J. Kennamer
  3307.        *:      Copyright (c) 1988, Walter J. Kennamer
  3308.        *:  Last modified: 02/26/88     23:00
  3309.        *:
  3310.        *:          Calls: HELP.PRG
  3311.        *:               : F2_HANDLR        (procedure in TODOPRC.PRG)
  3312.        *:               : HELPEDIT         (procedure in TODOPRC.PRG)
  3313.        *:               : TDDEFLT.PRG
  3314.        *:               : ERRORMSG         (procedure in TODOPRC.PRG)
  3315.        *:               : SETDATE.PRG
  3316.        *:               : TDLOGO.PRG
  3317.        *:               : TDSETUP.PRG
  3318.        *:               : TDINPUT.PRG
  3319.        *:
  3320.        *:   Memory Files: ACCESSES.MEM
  3321.        *:               : DEFAULT.MEM
  3322.        *:
  3323.        *:     Documented: 03/02/88 at 18:39                 SNAP! version 3.00
  3324.        *:*********************************************************************
  3325.        PARAMETERS c_line               && command line
  3326.        *# SNAPMACRO s_tdfile   todo
  3327.        *# SNAPMACRO s_ddndx    tododd
  3328.        *# SNAPMACRO s0_adfname address
  3329.        external subject
  3330.        PUBLIC clipper,s_cmdline
  3331.        IF pcount() > 0
  3332.           s_cmdline = Alltrim(UPPER(c_line))
  3333.        ELSE
  3334.           s_cmdline = ""
  3335.        ENDIF
  3336.           .
  3337.           .
  3338.           .
  3339.        * read defaults
  3340.        USE
  3341.        IF FILE("default.mem")
  3342.           REST FROM  DEFAULT ADDITIVE
  3343.           IF s0_bw
  3344.              s0_montype = "M"
  3345.           ELSE
  3346.              s0_montype = "C"
  3347.           ENDIF
  3348.        ELSE
  3349.           DO tddeflt
  3350.        ENDIF
  3351.        DO tdinput
  3352.  
  3353.                                            55
  3354.  
  3355.  
  3356.  
  3357.  
  3358.  
  3359.  
  3360.  
  3361.        *: EOF: TODO.PRG
  3362.  
  3363.  
  3364.  
  3365.  
  3366.  
  3367.  
  3368.  
  3369.  
  3370.  
  3371.  
  3372.  
  3373.  
  3374.  
  3375.  
  3376.  
  3377.  
  3378.  
  3379.  
  3380.  
  3381.  
  3382.  
  3383.  
  3384.  
  3385.  
  3386.  
  3387.  
  3388.  
  3389.  
  3390.  
  3391.  
  3392.  
  3393.  
  3394.  
  3395.  
  3396.  
  3397.  
  3398.  
  3399.  
  3400.  
  3401.  
  3402.  
  3403.  
  3404.  
  3405.  
  3406.  
  3407.  
  3408.  
  3409.  
  3410.  
  3411.  
  3412.  
  3413.  
  3414.                                            56
  3415.  
  3416.  
  3417.  
  3418.  
  3419.  
  3420.  
  3421.  
  3422.  
  3423.        System Summary
  3424.  
  3425.        System: ToDo -- To Do Management System
  3426.        Author: Walter J. Kennamer
  3427.        03/02/88   18:56:29
  3428.        System Summary
  3429.  
  3430.        -------------------------------------------------------------------------
  3431.  
  3432.  
  3433.        This system has:
  3434.          8636 lines of code
  3435.            46 program files
  3436.             2 procedure files
  3437.            84 procedures and functions
  3438.            18 databases
  3439.             8 index files
  3440.             3 report forms
  3441.             0 format files
  3442.             0 label forms
  3443.             5 memory variable files
  3444.           622 cross-referenced tokens
  3445.  
  3446.  
  3447.        See the tree diagram for programs, procedures, functions and format files
  3448.  
  3449.  
  3450.                           Index          Report         Label          Memory
  3451.          Databases        Files          Forms          Forms          Files
  3452.        -------------- -------------- -------------- -------------- -------------
  3453.  
  3454.        HELP.DBF       HELPKEY.NTX    SUBREPT.FRM                   ACCESSES.MEM
  3455.        TODO.SKL       SUBJECT.NTX    TDSUMIN.FRM                   DEFAULT.MEM
  3456.        TODO.DBF       TODODD.NTX     TDDETIN.FRM                   LASTFILE.MEM
  3457.        SUBJECT.DBF    &NTXNAME                                     PRINTER.MEM
  3458.        ADDRESS.DBF    HISTDD.NTX                                   CLIP.MEM
  3459.        &B_FILE.DBF    PRIORITY.NDX
  3460.        NOTEPAD.DBF    DATEDUE.NDX
  3461.        PRTCODES.DBF   DATEDUE.NTX
  3462.        &FILE
  3463.        HIST.DBF
  3464.        TEMP.DBF
  3465.        &FNAME
  3466.        &BAK_NAME.DBF
  3467.        &FNAME.DBF
  3468.        AREACODE.DBF
  3469.        DATEDUE.DBF
  3470.        PRM.SKL
  3471.        ADDRESS.ASC
  3472.  
  3473.  
  3474.  
  3475.                                            57
  3476.  
  3477.  
  3478.  
  3479.  
  3480.  
  3481.  
  3482.  
  3483.  
  3484.        -------------------------------------------------------------------------
  3485.        SNAP! created the following documentation files:
  3486.           C:\SCRATCH\STATS.DOC
  3487.           C:\SCRATCH\TREE.DOC
  3488.           C:\SCRATCH\FILELIST.DOC
  3489.           C:\SCRATCH\NDXSUMRY.DOC
  3490.           C:\SCRATCH\DATADICT.DOC
  3491.           C:\SCRATCH\FRMSUMRY.DOC
  3492.           C:\SCRATCH\PRCSUMRY.DOC
  3493.           C:\SCRATCH\XREF.DOC
  3494.           C:\SCRATCH\TODO.LNK
  3495.           C:\SCRATCH\TODO.TLK
  3496.           C:\SCRATCH\TODO.MLK
  3497.           C:\SCRATCH\MAKEFILE
  3498.           C:\SCRATCH\ERROR.DOC
  3499.           Action diagram files
  3500.           UPDATE.BAT   to update program source files in C:\TODO
  3501.           BACKDBF.BAT  to backup databases, indexes and memory files
  3502.           BACKPRG.BAT  to backup program files, report forms and format files
  3503.           PRINTDOC.BAT to print documentation files
  3504.  
  3505.  
  3506.  
  3507.  
  3508.  
  3509.  
  3510.  
  3511.  
  3512.  
  3513.  
  3514.  
  3515.  
  3516.  
  3517.  
  3518.  
  3519.  
  3520.  
  3521.  
  3522.  
  3523.  
  3524.  
  3525.  
  3526.  
  3527.  
  3528.  
  3529.  
  3530.  
  3531.  
  3532.  
  3533.  
  3534.  
  3535.  
  3536.                                            58
  3537.  
  3538.  
  3539.  
  3540.  
  3541.  
  3542.  
  3543.  
  3544.  
  3545.        System: ToDo -- To Do Management System
  3546.        Author: Walter J. Kennamer
  3547.        03/02/88   18:56:09
  3548.        Tree Diagram
  3549.  
  3550.        -------------------------------------------------------------------------
  3551.  
  3552.        TODO.PRG
  3553.        ├────HELP.PRG
  3554.        │    │    HELP.DBF (database)
  3555.        │    ├────SHOW_HELP (procedure in HELP.PRG)
  3556.        │    │    ├────SETCOLOR (procedure in TODOPRC.PRG)
  3557.        │    │    └────CENTER (procedure in TODOPRC.PRG)
  3558.        │    ├────SETCOLOR (procedure in TODOPRC.PRG)
  3559.        │    └────CENTER (procedure in TODOPRC.PRG)
  3560.        ├────F2_HANDLR (procedure in TODOPRC.PRG)
  3561.        │    ├────ADDRLIST.PRG
  3562.        │    │    └────SETCOLOR (procedure in TODOPRC.PRG)
  3563.        │    └────NUMLIST.PRG
  3564.        │         └────SETCOLOR (procedure in TODOPRC.PRG)
  3565.        ├────HELPEDIT (procedure in TODOPRC.PRG)
  3566.        ├────TDDEFLT.PRG
  3567.        │    ├────SETCOLOR (procedure in TODOPRC.PRG)
  3568.        │    ├────SCRHEAD (procedure in TODOPRC.PRG)
  3569.        │    │    └────SETCOLOR (procedure in TODOPRC.PRG)
  3570.        │    ├────TDSETUP.PRG
  3571.        │    │    │    TODO.SKL (database)
  3572.        │    │    │    TODO.DBF (database)
  3573.        │    │    │    SUBJECT.DBF (database)
  3574.        │    │    │    ADDRESS.DBF (database)
  3575.        │    ├────CENTER (procedure in TODOPRC.PRG)
  3576.        │    ├────SETDATE.PRG
  3577.        │    ├────SETPRT.PRG
  3578.        │    │    │    PRTCODES.DBF (database)
  3579.        │    │    ├────SCRHEAD (procedure in TODOPRC.PRG)
  3580.        │    │    │    └────SETCOLOR (procedure in TODOPRC.PRG)
  3581.        │    │    └────ERRORMSG (procedure in TODOPRC.PRG)
  3582.        │    │         ├────SETCOLOR (procedure in TODOPRC.PRG)
  3583.        │    │         └────CENTER (procedure in TODOPRC.PRG)
  3584.        │    ├────F2_HANDLR (procedure in TODOPRC.PRG)
  3585.        │    │    ├────ADDRLIST.PRG
  3586.        │    │    │    └────SETCOLOR (procedure in TODOPRC.PRG)
  3587.        │    │    └────NUMLIST.PRG
  3588.        │    │         └────SETCOLOR (procedure in TODOPRC.PRG)
  3589.        │    ├────F3_HANDLR (procedure in TODOPRC.PRG)
  3590.  
  3591.        and so forth
  3592.  
  3593.  
  3594.  
  3595.  
  3596.  
  3597.                                            59
  3598.  
  3599.  
  3600.  
  3601.  
  3602.  
  3603.  
  3604.  
  3605.  
  3606.        System: ToDo -- To Do Management System
  3607.        Author: Walter J. Kennamer
  3608.        03/02/88   18:55:52
  3609.        Procedure and Function Summary
  3610.  
  3611.        -------------------------------------------------------------------------
  3612.  
  3613.        2 procedure files in the system
  3614.           SUBJECT.PRG
  3615.           TODOPRC.PRG
  3616.        -------------------------------------------------------------------------
  3617.  
  3618.        SUBJECT.PRG -- Last updated:  12/30/87 at   8:47
  3619.  
  3620.           Contains: SUBOK()               (Params: SUBNAME)
  3621.                  Calls: SETCOLOR          (procedure in TODOPRC.PRG)
  3622.                  Calls: CENTER            (procedure in TODOPRC.PRG)
  3623.                  Calls: PUTSUB            (procedure in TODOPRC.PRG)
  3624.           Contains: SUBLOOK()             (Params: M_SUBNAME)
  3625.                  Calls: SETCOLOR          (procedure in TODOPRC.PRG)
  3626.                    .
  3627.                    .
  3628.                    .
  3629.           Contains: SUBEDIT               (Params: none)
  3630.              Called by: ED()              (function in SUBJECT.PRG)
  3631.                  Calls: SETCOLOR          (procedure in TODOPRC.PRG)
  3632.  
  3633.        -------------------------------------------------------------------------
  3634.        TODOPRC.PRG -- Last updated:  12/28/87 at  14:20
  3635.  
  3636.  
  3637.           Contains: F2_HANDLR             (Params: none)
  3638.              Called by: TODO.PRG
  3639.              Called by: TDDEFLT.PRG
  3640.                  Calls: ADDRLIST.PRG
  3641.                  Calls: NUMLIST.PRG
  3642.           Contains: F3_HANDLR             (Params: none)
  3643.              Called by: TODO.PRG
  3644.              Called by: TDDEFLT.PRG
  3645.                  Calls: SETCOLOR          (procedure in TODOPRC.PRG)
  3646.           Contains: F4_HANDLR             (Params: none)
  3647.              Called by: TODO.PRG
  3648.              Called by: TDDEFLT.PRG
  3649.                    .
  3650.                    .
  3651.                    .
  3652.           Contains: ISCTRL()              (Params: none)
  3653.           Contains: SCREEN_ON             (Params: none)
  3654.              Called by: ROLODEX.PRG
  3655.           Contains: PRINT_ON              (Params: none)
  3656.              Called by: ROLODEX.PRG
  3657.  
  3658.                                            60
  3659.  
  3660.  
  3661.  
  3662.  
  3663.  
  3664.  
  3665.  
  3666.  
  3667.        System: ToDo -- To Do Management System
  3668.        Author: Walter J. Kennamer
  3669.        03/02/88   18:55:42
  3670.        Database Structure Summary
  3671.  
  3672.        -------------------------------------------------------------------------
  3673.  
  3674.        3 databases in the system
  3675.           HELP.DBF
  3676.           TODO.DBF
  3677.           SUBJECT.DBF
  3678.        -------------------------------------------------------------------------
  3679.  
  3680.        Structure for database : HELP.DBF
  3681.        Number of data records :      37
  3682.                  Last updated :  09/09/87 at  11:06
  3683.        Field  Field name  Type        Width    Dec    Start      End
  3684.            1  HCALLPRG    Character       8               1        8
  3685.            2  HINPUTVAR   Character      12               9       20
  3686.            3  HSCRNNUM    Character       4              21       24
  3687.            4  HELPMSG     Memo           10              25       34
  3688.        ** Total **                       35
  3689.  
  3690.  
  3691.        This database is associated with the memo file: HELP.DBT
  3692.  
  3693.        This database appears to be associated with index file(s):
  3694.               : HELPKEY.NTX  (UPPER(hcallprg+hscrnnum+hinputvar))
  3695.  
  3696.        SNAP! did not find any associated report forms
  3697.  
  3698.        Used by: HELP.PRG
  3699.               : TDFIX.PRG
  3700.               : TDREINDX.PRG
  3701.               : TDREPAIR       (procedure in TDFIX.PRG)
  3702.  
  3703.        -------------------------------------------------------------------------
  3704.  
  3705.  
  3706.        Structure for database : TODO.DBF
  3707.        Number of data records :     112
  3708.                  Last updated :  03/01/88 at  17:35
  3709.        Field  Field name  Type        Width    Dec    Start      End
  3710.            1  ITEM        Character      55               1       55
  3711.            2  PRIORITY    Character       1              56       56
  3712.            3  DATE_DUE    Date            8              57       64
  3713.            4  CALTIME     Character       5              65       69
  3714.            5  COMPLETE    Character       1              70       70
  3715.            6  ADVANCE     Numeric         3              71       73
  3716.            7  DATE_ASGN   Date            8              74       81
  3717.            8  DATE_COMP   Date            8              82       89
  3718.  
  3719.                                            61
  3720.  
  3721.  
  3722.  
  3723.  
  3724.  
  3725.  
  3726.  
  3727.            9  LATE        Numeric         3              90       92
  3728.           10  ITEMTYPE    Character       1              93       93
  3729.           11  ALARM       Character       1              94       94
  3730.           12  SUBJECT     Character      30              95      124
  3731.           13  DURATION    Numeric         8      2      125      132
  3732.           14  VERSION     Character       5             133      137
  3733.        ** Total **                      138
  3734.  
  3735.  
  3736.        This database appears to be associated with index file(s):
  3737.               : TODODD.NTX   (DTOS(date_due)+priority+caltime)
  3738.               : DATEDUE.NDX  (index key not found)
  3739.  
  3740.        This database appears to be associated with multiple index file(s):
  3741.               : TODO.MDX
  3742.  
  3743.        SNAP! did not find any associated report forms
  3744.  
  3745.        Used by: TDSETUP.PRG
  3746.               : TDINPUT.PRG
  3747.               : OPENDATA       (procedure in TDSETUP.PRG)
  3748.               : EDITEXIT.PRG
  3749.               : TDREDATE.PRG
  3750.               : TDPURGE.PRG
  3751.               : TDFIX.PRG
  3752.               : TDCAL.PRG
  3753.               : TDREINDX.PRG
  3754.  
  3755.        -------------------------------------------------------------------------
  3756.  
  3757.  
  3758.        Structure for database : SUBJECT.DBF
  3759.        Number of data records :      41
  3760.                  Last updated :  01/12/88 at   9:34
  3761.        Field  Field name  Type        Width    Dec    Start      End
  3762.            1  SUBCODE     Character      20               1       20
  3763.            2  SUBJECT     Character      30              21       50
  3764.        ** Total **                       51
  3765.  
  3766.  
  3767.        This database appears to be associated with index file(s):
  3768.               : SUBJECT.NTX  (UPPER(subject))
  3769.  
  3770.        SNAP! did not find any associated report forms
  3771.  
  3772.        Used by: TDSETUP.PRG
  3773.               : TDINPUT.PRG
  3774.               : OPENDATA       (procedure in TDSETUP.PRG)
  3775.               : TDREINDX.PRG
  3776.  
  3777.  
  3778.  
  3779.  
  3780.                                            62
  3781.  
  3782.  
  3783.  
  3784.  
  3785.  
  3786.  
  3787.  
  3788.        -------------------------------------------------------------------------
  3789.        System: ToDo -- To Do Management System
  3790.        Author: Walter J. Kennamer
  3791.        03/02/88   18:55:49
  3792.        Database summary
  3793.        -------------------------------------------------------------------------
  3794.  
  3795.        Note: the actual system used more than 3 databases.  All but three were
  3796.        removed above to save space.  This portion of the report shows all of
  3797.        them.
  3798.  
  3799.        Field Name         Type    Len   Dec     Database
  3800.        ABBREV              C       2     0     AREACODE.DBF
  3801.        ADDRESS             C      53     0     ADDRESS.DBF
  3802.        ADVANCE             N       3     0     TODO.SKL
  3803.                                                TODO.DBF
  3804.                                                HIST.DBF
  3805.        ALARM               C       1     0     TODO.SKL
  3806.                                                TODO.DBF
  3807.                                                HIST.DBF
  3808.        AREACODE            N       3     0     AREACODE.DBF
  3809.        BPHONE              C      12     0     ADDRESS.DBF
  3810.        CALTIME             C       5     0     TODO.SKL
  3811.                                                TODO.DBF
  3812.                                                HIST.DBF
  3813.        CITIES              C      78     0     AREACODE.DBF
  3814.        CITY                C      25     0     ADDRESS.DBF
  3815.        COL                 N       2     0     PRTCODES.DBF
  3816.        COMMENT             C      50     0     ADDRESS.DBF
  3817.        COMPANY             C      53     0     ADDRESS.DBF
  3818.        COMPLETE            C       1     0     TODO.SKL
  3819.                                                TODO.DBF
  3820.                                                HIST.DBF
  3821.        COMPRESS            C      13     0     PRTCODES.DBF
  3822.        COUNTRY             C      20     0     ADDRESS.DBF
  3823.        DATE_ASGN           D       8     0     TODO.SKL
  3824.                                                TODO.DBF
  3825.                                                HIST.DBF
  3826.        DATE_COMP           D       8     0     TODO.SKL
  3827.                                                TODO.DBF
  3828.                                                HIST.DBF
  3829.        DATE_DUE            D       8     0     TODO.SKL
  3830.                                                TODO.DBF
  3831.                                                HIST.DBF
  3832.        DURATION            N       8     2     TODO.SKL
  3833.                                                TODO.DBF
  3834.        ELITE               C      13     0     PRTCODES.DBF
  3835.        FORMFEED            C      13     0     PRTCODES.DBF
  3836.        HCALLPRG            C       8     0     HELP.DBF
  3837.        HELPMSG             M      10     0     HELP.DBF
  3838.        HINPUTVAR           C      12     0     HELP.DBF
  3839.        HSCRNNUM            C       4     0     HELP.DBF
  3840.  
  3841.                                            63
  3842.  
  3843.  
  3844.  
  3845.  
  3846.  
  3847.  
  3848.  
  3849.        ITEM                C      55     0     TODO.SKL
  3850.                                                TODO.DBF
  3851.                                                HIST.DBF
  3852.        ITEMTYPE            C       1     0     TODO.SKL
  3853.                                                TODO.DBF
  3854.                                                HIST.DBF
  3855.        LATE                N       3     0     TODO.SKL
  3856.                                                TODO.DBF
  3857.                                                HIST.DBF
  3858.        LINE                C      78     0     TEMP.DBF
  3859.                                                PRM.SKL
  3860.        NAME                C      30     0     ADDRESS.DBF
  3861.        NAME                C      25     0     PRTCODES.DBF
  3862.        NOTES               M      10     0     ADDRESS.DBF
  3863.                                                NOTEPAD.DBF
  3864.        PHONE               C      12     0     ADDRESS.DBF
  3865.        POSITION            C      40     0     ADDRESS.DBF
  3866.        PRIORITY            C       1     0     TODO.SKL
  3867.                                                TODO.DBF
  3868.                                                HIST.DBF
  3869.        PRTNUM              N       2     0     PRTCODES.DBF
  3870.        RESET               C      13     0     PRTCODES.DBF
  3871.        ROW                 N       2     0     PRTCODES.DBF
  3872.        SECONDLINE          C      53     0     ADDRESS.DBF
  3873.        STATE               C       2     0     ADDRESS.DBF
  3874.        STATE               C      15     0     AREACODE.DBF
  3875.        SUBCODE             C      20     0     SUBJECT.DBF
  3876.        SUBJECT             C      30     0     TODO.SKL
  3877.                                                TODO.DBF
  3878.                                                SUBJECT.DBF
  3879.                                                HIST.DBF
  3880.        VERSION             C       5     0     TODO.SKL
  3881.                                                TODO.DBF
  3882.                                                NOTEPAD.DBF
  3883.        ZIP                 C      10     0     ADDRESS.DBF
  3884.  
  3885.  
  3886.  
  3887.  
  3888.  
  3889.  
  3890.  
  3891.  
  3892.  
  3893.  
  3894.  
  3895.  
  3896.  
  3897.  
  3898.  
  3899.  
  3900.  
  3901.  
  3902.                                            64
  3903.  
  3904.  
  3905.  
  3906.  
  3907.  
  3908.  
  3909.  
  3910.        System: ToDo -- To Do Management System
  3911.        Author: Walter J. Kennamer
  3912.        03/02/88   18:55:15
  3913.        Index Parameter Summary
  3914.  
  3915.        -------------------------------------------------------------------------
  3916.  
  3917.        5 index files in the system
  3918.           HELPKEY.NDX
  3919.           SUBJECT.NDX
  3920.           TODODD.NDX
  3921.           &NTXNAME
  3922.           DATEDUE.NDX
  3923.        -------------------------------------------------------------------------
  3924.  
  3925.        HELPKEY.NTX -- Indexed on: UPPER(hcallprg+hscrnnum+hinputvar)
  3926.        Last updated:  09/09/87 at  11:06
  3927.  
  3928.  
  3929.        This index file appears to be associated with database(s):
  3930.               : HELP.DBF
  3931.  
  3932.        Used by: HELP.PRG
  3933.               : TDFIX.PRG
  3934.               : TDREINDX.PRG
  3935.               : TDREPAIR       (procedure in TDFIX.PRG)
  3936.  
  3937.        -------------------------------------------------------------------------
  3938.        SUBJECT.NTX -- Indexed on: UPPER(subject)
  3939.        Last updated:  01/12/88 at   9:16
  3940.  
  3941.  
  3942.        This index file appears to be associated with database(s):
  3943.               : SUBJECT.DBF
  3944.  
  3945.        Used by: SUBLOOK()      (function  in SUBJECT.PRG)
  3946.               : PART_MATCH()   (function  in SUBJECT.PRG)
  3947.               : TDSETUP.PRG
  3948.               : TDINPUT.PRG
  3949.               : OPENDATA       (procedure in TDSETUP.PRG)
  3950.               : TDFIX.PRG
  3951.               : TDREINDX.PRG
  3952.               : TDREPAIR       (procedure in TDFIX.PRG)
  3953.  
  3954.        -------------------------------------------------------------------------
  3955.        TODODD.NTX -- Indexed on: DTOS(date_due)+priority+caltime
  3956.        Last updated:  03/01/88 at  17:35
  3957.  
  3958.  
  3959.        This index file appears to be associated with database(s):
  3960.               : TODO.DBF
  3961.  
  3962.  
  3963.                                            65
  3964.  
  3965.  
  3966.  
  3967.  
  3968.  
  3969.  
  3970.  
  3971.        Used by: TDSETUP.PRG
  3972.               : TDINPUT.PRG
  3973.               : EDITEXIT.PRG
  3974.               : EDITSRCH.PRG
  3975.               : TDREDATE.PRG
  3976.               : TDPURGE.PRG
  3977.               : EDITCHGE.PRG
  3978.               : TDFIX.PRG
  3979.               : PRTUNCMP.PRG
  3980.               : TDREINDX.PRG
  3981.               : TDREPAIR       (procedure in TDFIX.PRG)
  3982.  
  3983.        -------------------------------------------------------------------------
  3984.        &NTXNAME is a macro unknown to SNAP!
  3985.  
  3986.        This index file appears to be associated with database(s):
  3987.               : ADDRESS.DBF
  3988.  
  3989.        Used by: TDSETUP.PRG
  3990.               : OPENDATA       (procedure in TDSETUP.PRG)
  3991.               : ADDRESS.PRG
  3992.               : TDFIX.PRG
  3993.               : TDREINDX.PRG
  3994.               : TDREPAIR       (procedure in TDFIX.PRG)
  3995.               : ADDRBOOK.PRG
  3996.               : ROLODEX.PRG
  3997.  
  3998.        -------------------------------------------------------------------------
  3999.        File not found--DATEDUE.NDX
  4000.  
  4001.        This index file appears to be associated with database(s):
  4002.               : TODO.DBF
  4003.  
  4004.        Used by: TDCAL.PRG
  4005.               : TDCALDAY.PRG
  4006.  
  4007.  
  4008.  
  4009.  
  4010.  
  4011.  
  4012.  
  4013.  
  4014.  
  4015.  
  4016.  
  4017.  
  4018.  
  4019.  
  4020.  
  4021.  
  4022.  
  4023.  
  4024.                                            66
  4025.  
  4026.  
  4027.  
  4028.  
  4029.  
  4030.  
  4031.  
  4032.        System: ToDo -- To Do Management System
  4033.        Author: Walter J. Kennamer
  4034.        03/02/88   18:55:15
  4035.        Multiple Index Summary
  4036.  
  4037.        -------------------------------------------------------------------------
  4038.  
  4039.        1 multiple index file in the system
  4040.           TODO.MDX
  4041.        -------------------------------------------------------------------------
  4042.  
  4043.        TODO.MTX--Last updated:  09/09/87 at  11:06
  4044.               TAG : TDITEM  (item)
  4045.               TAG : TDPRIOR (priority+itemtype)
  4046.  
  4047.        This multiple index file appears to be associated with database(s):
  4048.               : TODO.DBF
  4049.  
  4050.        Used by: TODO.PRG
  4051.  
  4052.  
  4053.  
  4054.  
  4055.  
  4056.  
  4057.  
  4058.  
  4059.  
  4060.  
  4061.  
  4062.  
  4063.  
  4064.  
  4065.  
  4066.  
  4067.  
  4068.  
  4069.  
  4070.  
  4071.  
  4072.  
  4073.  
  4074.  
  4075.  
  4076.  
  4077.  
  4078.  
  4079.  
  4080.  
  4081.  
  4082.  
  4083.  
  4084.  
  4085.                                            67
  4086.  
  4087.  
  4088.  
  4089.  
  4090.  
  4091.  
  4092.  
  4093.        System: ToDo -- To Do Management System
  4094.        Author: Walter J. Kennamer
  4095.        03/02/88   18:55:50
  4096.        Report Form File Summary
  4097.  
  4098.        -------------------------------------------------------------------------
  4099.  
  4100.        2 report forms in the system
  4101.           SUBREPT.FRM
  4102.           TDSUMIN.FRM
  4103.         ------------------------------------------------------------------------
  4104.  
  4105.        SUBREPT.FRM                              Last updated:  08/24/87 at  10:14
  4106.           Summary report?  No
  4107.           Eject page before printing?  No       Eject page after printing?  Yes
  4108.           Double space report?  No              Plain page?  No
  4109.           Left margin:    8                     Right Margin:    0
  4110.  
  4111.          
  4112.      -------------------------------------------------------------------------
  4113.                                         Report Contents
  4114.          
  4115.      -------------------------------------------------------------------------
  4116.        No.   Field                               Length    Decimals     Totaled?
  4117.        ---   ----------------------------------  ------    --------     --------
  4118.  
  4119.          1   Subject                                 40        0            No
  4120.          2   Subcode                                 25        0            No
  4121.                                                   -----
  4122.                                                      65
  4123.                                                   =====
  4124.  
  4125.  
  4126.           -----------------------------------------------------------------------
  4127.                                           Report Layout
  4128.           -----------------------------------------------------------------------
  4129.        Page No.     1
  4130.        00/00/00
  4131.  
  4132.                                                  Subject Codes
  4133.  
  4134.        Subject                                  Charge Code
  4135.        1                                        2
  4136.  
  4137.           ----------------------------------------------------------------------
  4138.                       Database and Program References
  4139.           ----------------------------------------------------------------------
  4140.  
  4141.           SNAP! could not find an associated database
  4142.  
  4143.           Used by: SUBREPT        (procedure in SUBJECT.PRG)
  4144.  
  4145.  
  4146.                                            68
  4147.  
  4148.  
  4149.  
  4150.  
  4151.  
  4152.  
  4153.  
  4154.  
  4155.  
  4156.  
  4157.        TDSUMIN.FRM                             Last updated:  09/01/87 at  15:17
  4158.           Summary report?  No
  4159.           Eject page before printing?  Yes      Eject page after printing?  Yes
  4160.           Double space report?  Yes             Plain page?  No
  4161.           Left margin:    1                     Right Margin:    0
  4162.  
  4163.          
  4164.      -------------------------------------------------------------------------
  4165.                                         Report Contents
  4166.          
  4167.      -------------------------------------------------------------------------
  4168.        No.   Field                               Length    Decimals     Totaled?
  4169.        ---   ----------------------------------  ------    --------     --------
  4170.  
  4171.          1   "______"                                 6        0            No
  4172.          2   RECNO()                                  4        0            No
  4173.          3   Item                                    55        0            No
  4174.          4   " "+dtoc(date_due)                       9        0            No
  4175.          5   Caltime                                  6        0            No
  4176.                                                   -----
  4177.                                                      80
  4178.                                                   =====
  4179.  
  4180.  
  4181.          ----------------------------------------------------------------------
  4182.                                    Report Layout
  4183.          ----------------------------------------------------------------------
  4184.        Page No.     1
  4185.        00/00/00
  4186.  
  4187.  
  4188.  
  4189.                                                Uncompleted Items
  4190.  
  4191.               No.  Item                                        Due Date  Time
  4192.               ===  =========================================== ========= =====
  4193.          1    2    3                                           4         5
  4194.  
  4195.  
  4196.           ----------------------------------------------------------------------
  4197.                       Database and Program References
  4198.           ----------------------------------------------------------------------
  4199.  
  4200.           SNAP! could not find an associated database
  4201.  
  4202.           Used by: PRTUNCMP.PRG
  4203.  
  4204.  
  4205.  
  4206.  
  4207.                                            69
  4208.  
  4209.  
  4210.  
  4211.  
  4212.  
  4213.  
  4214.  
  4215.        System: FoxAPP
  4216.        Author: Walter J. Kennamer
  4217.        09/04/91   08:51:49
  4218.        Screen File Summary
  4219.  
  4220.      -----------------------------------------------------------------------------
  4221.      --
  4222.  
  4223.        1 screen file in the system
  4224.           APPSCX.SCX
  4225.      -----------------------------------------------------------------------------
  4226.      --
  4227.  
  4228.        APPSCX.SCX           Last updated:  06/28/91 at 17:29
  4229.  
  4230.                                FoxPro Application Generator                        
  4231.       
  4232.  
  4233.         0         1         2         3         4         5         
  4234.         012345678901234567890123456789012345678901234567890123456789
  4235.        0 
  4236.        1     Step 1: Create or modify a database
  4237.        2      ┌───────────────────────────────────────┐
  4238.        3      │Database name:                         │
  4239.        4      │1: dbfname.............................│
  4240.        5      │< Create >    < Modify >    <File List>│
  4241.        6      └───────────────────────────────────────┘
  4242.        7 
  4243.        8     Step 2 : Design a screen
  4244.        9      ┌───────────────────────────────────────┐
  4245.       10      │Screen name:                           │
  4246.       11      │5: scxname.............................│
  4247.       12      │< Create >    < Modify >    <File List>│
  4248.       13      └───────────────────────────────────────┘
  4249.       14                   «  Generate  »
  4250.       15 
  4251.       16                   <   Cancel   >
  4252.  
  4253.       
  4254.      -----------------------------------------------------------------------------
  4255.      -
  4256.           Window name: Appgen
  4257.           Coordinates: FROM 0,0 TO 0,52
  4258.        Window options: FLOAT CLOSE MINIMIZE SHADOW
  4259.  
  4260.       
  4261.      -----------------------------------------------------------------------------
  4262.      -
  4263.  
  4264.           Name                Type           Picture                               
  4265.       
  4266.  
  4267.  
  4268.                                            70
  4269.  
  4270.  
  4271.  
  4272.  
  4273.  
  4274.  
  4275.  
  4276.       
  4277.      -----------------------------------------------------------------------------
  4278.      -
  4279.  
  4280.        1: dbfname             Field          "@S67"
  4281.        2: adddbf              Push button    "@*VN Create"
  4282.        3: moddbf              Push button    "@*VN Modify"
  4283.        4: Listdbf             Push button    "@*VN File List"
  4284.        5: scxname             Field          "@S67"
  4285.        6: addscx              Push button    "@*VN Create"
  4286.        7: modscx              Push button    "@*VN Modify"
  4287.        8: Listscx             Push button    "@*VN File List"
  4288.        9: generate            Push button    "@*VN \!Generate"
  4289.       10: cancbut             Push button    "@*VT \?Cancel"
  4290.  
  4291.  
  4292.  
  4293.  
  4294.  
  4295.  
  4296.  
  4297.  
  4298.  
  4299.  
  4300.  
  4301.  
  4302.  
  4303.  
  4304.  
  4305.  
  4306.  
  4307.  
  4308.  
  4309.  
  4310.  
  4311.  
  4312.  
  4313.  
  4314.  
  4315.  
  4316.  
  4317.  
  4318.  
  4319.  
  4320.  
  4321.  
  4322.  
  4323.  
  4324.  
  4325.  
  4326.  
  4327.  
  4328.  
  4329.                                            71
  4330.  
  4331.  
  4332.  
  4333.  
  4334.  
  4335.  
  4336.  
  4337.        System: APPMENU Menu Program
  4338.        Author: Walter J. Kennamer
  4339.        09/04/91   09:53:51
  4340.        Menu File Summary
  4341.  
  4342.      -----------------------------------------------------------------------------
  4343.      --
  4344.  
  4345.        1 menu file in the system
  4346.           APPMENU.MNX
  4347.      -----------------------------------------------------------------------------
  4348.      --
  4349.  
  4350.        APPMENU.MNX          Last updated:  06/29/91 at 15:53
  4351.  
  4352.         System                                         ALT+S   (Submenu SYSTEM)
  4353.            About...                                            (Procedure)   
  4354.            Help...                                     F1      _MST_HELP     
  4355.            Macros                                              _MST_MACRO    
  4356.            ------------                                        (Submenu
  4357.      _MST_CALCU)
  4358.            Calculator                                          _MST_CALCU    
  4359.            Calendar/Diary                                      _MST_DIARY    
  4360.            Puzzle                                              _MST_PUZZL    
  4361.            ------------                                        (Submenu )
  4362.            Quit                                                (Procedure)   
  4363.         Edit                                           ALT+E   (Submenu EDIT)
  4364.            Cut                                         CTRL+X  _MED_CUT      
  4365.            Copy                                        CTRL+C  _MED_COPY     
  4366.            Paste                                       CTRL+V  _MED_PASTE    
  4367.            ------------                                        _MED_SP200    
  4368.            Clear                                               _MED_CLEAR    
  4369.            Select All                                  CTRL+A  _MED_SLCTA    
  4370.            ------------                                        _MED_SP300    
  4371.            Preferences...                                      _MED_PREF     
  4372.         Application                                    ALT+A   (Submenu APPLIC)
  4373.            Top                                         F2      (Procedure)   
  4374.            Bottom                                      F3      (Procedure)   
  4375.            Next                                        F4      (Procedure)   
  4376.            Prior                                       F5      (Procedure)   
  4377.            ------------                                        (Submenu )
  4378.            Add record                                          (Procedure)   
  4379.            Copy record                                         (Procedure)   
  4380.            Delete record                               CTRL+D  (Procedure)   
  4381.            ------------                                        (Submenu )
  4382.            Browse                                      CTRL+B  (Procedure)   
  4383.            Search...                                   CTRL+S  (Procedure)   
  4384.            Filter...                                   CTRL+F  (Procedure)   
  4385.            Order...                                    CTRL+O  (Procedure)   
  4386.            ------------                                        (Submenu )
  4387.            Query...                                    CTRL+Q  (Procedure)   
  4388.            Report...                                   CTRL+R  DO prtopts    
  4389.  
  4390.                                            72
  4391.  
  4392.  
  4393.  
  4394.  
  4395.  
  4396.  
  4397.  
  4398.         Utilities                                      ALT+U   (Submenu UTILITIES)
  4399.            Construct index                                     (Procedure)   
  4400.            Pack                                                (Procedure)   
  4401.            Environment                                         (Submenu ENVIRO)
  4402.               Status Bar                                       (Procedure)   
  4403.               Clock                                            (Procedure)   
  4404.               Extended video                                   (Procedure)   
  4405.               Sticky                                           (Procedure)   
  4406.  
  4407.  
  4408.  
  4409.  
  4410.  
  4411.  
  4412.  
  4413.  
  4414.  
  4415.  
  4416.  
  4417.  
  4418.  
  4419.  
  4420.  
  4421.  
  4422.  
  4423.  
  4424.  
  4425.  
  4426.  
  4427.  
  4428.  
  4429.  
  4430.  
  4431.  
  4432.  
  4433.  
  4434.  
  4435.  
  4436.  
  4437.  
  4438.  
  4439.  
  4440.  
  4441.  
  4442.  
  4443.  
  4444.  
  4445.  
  4446.  
  4447.  
  4448.  
  4449.  
  4450.  
  4451.                                            73
  4452.  
  4453.  
  4454.  
  4455.  
  4456.  
  4457.  
  4458.  
  4459.        System: ToDo -- To Do Management System
  4460.        Author: Walter J. Kennamer
  4461.        03/02/88   18:55:58
  4462.        Token Cross-Reference Report
  4463.  
  4464.        ------------------------------------------------------------------------
  4465.  
  4466.        622 tokens are included in this report.
  4467.  
  4468.  
  4469.        Legend for context symbols:
  4470.           (blank) reference does not change the variable or field value.
  4471.           = variable or field is changed in an assignment statement.
  4472.           x variable is released.
  4473.           A array is declared.
  4474.           G GET statement changes variable or field.
  4475.           P variable is declared PUBLIC.
  4476.           R field is replaced.
  4477.           U database is USEd
  4478.           V variable is declared PRIVATE.
  4479.           & variable is referenced in a macro--takes preference over all others.
  4480.           @ variable passed as a var parameter--Clipper only
  4481.           ? reference is of unknown type.
  4482.  
  4483.        ABBREV
  4484.           AREACODE.PRG     90   134   178
  4485.  
  4486.        ABORT
  4487.           TDINPUT.PRG      62x   67P  306=
  4488.           EDITSRCH.PRG     35=   69=   99=
  4489.           EDITCHGE.PRG     32=
  4490.  
  4491.        ACCESSES
  4492.           TODO.PRG        130
  4493.           TDEXIT.PRG       24
  4494.  
  4495.           .
  4496.           .
  4497.           .
  4498.  
  4499.        YESNO
  4500.           ADDRESS.PRG     476=  482G  482   484   663=  664   665=  668G  668      
  4501.                          748=  751G  751   753
  4502.  
  4503.        YR
  4504.           TDCOPY.PRG      109=  116=  116   122   126   128   224   226   241=     
  4505.                          248   255   262   264   277
  4506.  
  4507.        ZIP
  4508.           ADDRESS.PRG     130   227   282   301R  336R  363
  4509.           ADDRBOOK.PRG     85    86    88
  4510.           ROLODEX.PRG     180   181   183
  4511.  
  4512.                                            74
  4513.  
  4514.  
  4515.  
  4516.  
  4517.  
  4518.  
  4519.  
  4520.        System: ToDo -- To Do Management System
  4521.        Author: Walter J. Kennamer
  4522.        03/02/88   18:56:06
  4523.        Public Variable Summary
  4524.  
  4525.        ------------------------------------------------------------------------
  4526.  
  4527.  
  4528.        These variables were declared PUBLIC somewhere in the system.
  4529.        Some may also be used as private variables in some parts of the code.
  4530.  
  4531.        ABORT                                   ADDR_MROW
  4532.        ANSWER                                  CARD_ROWS
  4533.        CLIPPER                                 CMD_LINE
  4534.        C_OFFSET                                DATE_STR
  4535.            .
  4536.            .
  4537.            .
  4538.        S_TESTDATE                              S_VERSION
  4539.        T_COMP                                  T_DATED
  4540.        T_DUR                                   T_ITEM
  4541.        T_ITEMTYPE                              T_PRIOR
  4542.        T_SUBJ                                  T_TIME
  4543.  
  4544.  
  4545.  
  4546.  
  4547.  
  4548.  
  4549.  
  4550.  
  4551.  
  4552.  
  4553.  
  4554.  
  4555.  
  4556.  
  4557.  
  4558.  
  4559.  
  4560.  
  4561.  
  4562.  
  4563.  
  4564.  
  4565.  
  4566.  
  4567.  
  4568.  
  4569.  
  4570.  
  4571.  
  4572.  
  4573.                                            75
  4574.  
  4575.  
  4576.  
  4577.  
  4578.  
  4579.  
  4580.  
  4581.        System: ToDo -- To Do Management System
  4582.        Author: Walter J. Kennamer
  4583.        03/02/88   18:56:06
  4584.        Macro Summary
  4585.  
  4586.        ------------------------------------------------------------------------
  4587.  
  4588.  
  4589.           Macros Defined to SNAP!
  4590.           ----------------------------------------------------------------------
  4591.  
  4592.           Variable       Expansion
  4593.           -------------- ---------------------------------
  4594.  
  4595.           S_TDFILE        TODO
  4596.           S_DDNDX         TODODD
  4597.           S0_ADFNAME      ADDRESS
  4598.  
  4599.           ----------------------------------------------------------------------
  4600.           Macros Not Defined to SNAP!
  4601.           ----------------------------------------------------------------------
  4602.  
  4603.           &BAK_NAME                               &B_FILE
  4604.           &COLR_STR                               &FIELD1
  4605.           &FIELD2                                 &FIELD_NAME
  4606.           &FILT_STR                               &FLDNAME
  4607.           &FNAME                                  &IN_DB
  4608.           &IN_SELECT                              &IN_VAL
  4609.           &M_WORKAREA                             &NTXNAME
  4610.           &NUM                                    &PROGNAME
  4611.           &REP_FNAME                              &REV_COLR
  4612.           &S0_COLR1                               &S0_COLR2
  4613.           &S0_DATA                                &S0_PRMNAME
  4614.           &S0_PROGRAM                             &S0_USERFILT
  4615.           &SRCHFLD                                &TEMPIN
  4616.  
  4617.        ------------------------------------------------------------------------
  4618.        System: ToDo -- To Do Management System
  4619.        Author: Walter J. Kennamer
  4620.        03/02/88   18:56:06
  4621.        Array Summary
  4622.  
  4623.        ------------------------------------------------------------------------
  4624.        An array declared with a variable (e.g., DECLARE foo[bar])
  4625.        will be shown as having a size of [var].
  4626.  
  4627.        FIELD_LENGTH[var]
  4628.        FIELD_LIST[2]
  4629.  
  4630.  
  4631.  
  4632.  
  4633.  
  4634.                                            76
  4635.  
  4636.  
  4637.  
  4638.  
  4639.  
  4640.  
  4641.  
  4642.  
  4643.        System: ToDo -- To Do Management System
  4644.        Author: Walter J. Kennamer
  4645.        03/02/88   18:56:29
  4646.        File List
  4647.        ------------------------------------------------------------------------
  4648.  
  4649.        Programs and procedures:
  4650.          ADDRBOOK.PRG
  4651.          ADDRESS.PRG
  4652.          ADDRFILT()        (function  in ADDRESS.PRG)
  4653.          ADDRLIST.PRG
  4654.              .
  4655.              .
  4656.              .
  4657.          TIMEFORM()        (function  in TDCALDAY.PRG)
  4658.          TODO.PRG
  4659.          UNHIGHLIGHT       (procedure in SHOWCAL.PRG)
  4660.          VERPRT.PRG
  4661.  
  4662.        Procedure files:
  4663.          SUBJECT.PRG
  4664.          TODOPRC.PRG
  4665.  
  4666.        Databases:
  4667.             .
  4668.             .
  4669.             .
  4670.          HELP.DBF
  4671.          HELP.DBT
  4672.          SUBJECT.DBF
  4673.          TODO.DBF
  4674.  
  4675.        Index files:
  4676.          &NTXNAME
  4677.          DATEDUE.NDX
  4678.          DATEDUE.NTX
  4679.          HELPKEY.NTX
  4680.          HISTDD.NTX
  4681.          PRIORITY.NDX
  4682.          SUBJECT.NTX
  4683.          TODODD.NTX
  4684.  
  4685.        Report forms:
  4686.          SUBREPT.FRM
  4687.          TDDETIN.FRM
  4688.          TDSUMIN.FRM
  4689.  
  4690.        Memory files:
  4691.          ACCESSES.MEM
  4692.          CLIP.MEM
  4693.          DEFAULT.MEM
  4694.  
  4695.                                            77
  4696.  
  4697.  
  4698.  
  4699.  
  4700.  
  4701.  
  4702.  
  4703.  
  4704.  
  4705.                                    Index
  4706.  
  4707.      4PRINT  . . . . . . . . . . . . . . . . . . . . . . . . .  12, 13
  4708.      Abbreviations . . . . . . . . . . . . . . . . . . . . . . . .  10
  4709.      Acknowledgements  . . . . . . . . . . . . . . . . . . . . . .  53
  4710.      Action diagrams . . . . . . . . .  4, 6, 8, 10, 13, 20, 37-41, 58
  4711.         User-defined symbols . . . . . . . . . . . . . . . . . . .  40
  4712.      Ashton-Tate . . . . . . . . . . . . . . . . . . . . . . . . 1, 51
  4713.      Association of Shareware Professionals  . . . . . . . . . . .  52
  4714.      Backup
  4715.         Importance of  . . . . . . . . . . . . . . . . . . . . . . . 7
  4716.      Batch operation . . . . . . . . . . . . . . . . . . . . . . .  43
  4717.      Blank lines, suppression of . . . . . . . . . . . . . . . . .  22
  4718.      Break Statements  . . . . . . . . . . . . . . . . . .  20, 40, 46
  4719.      Capitalization  . . . . . .  5, 10, 18, 21-23, 34, 35, 39, 48, 50
  4720.      CDX . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  11
  4721.      Change history  . . . . . . . . . . . . . . . . . . . . . . .  47
  4722.      Clipper
  4723.         Index files  . . . . . . . . .  11, 29, 42, 57, 61, 62, 65, 77
  4724.      Command line switches
  4725.         /A -- Alternate CASE indenting . . . . . . . . . . . . . .  21
  4726.         /BW -- black and white . . . . . . . . . . . . . . . . . .  46
  4727.         /F -- Configuration file name  . . . . . . . . . . . . . . . 9
  4728.         /M -- macro file name  . . . . . . . . . . . . . . . . . .  14
  4729.         /O -- omit macros  . . . . . . . . . . . . . . . . . . . .  14
  4730.         /P -- Printer port or filename . . . . . . . . . . . . . .  42
  4731.         /S -- Echo reports to screen . . . . . . . . . . . . . . .  26
  4732.         /T -- SNAP! tag (changing *#)  . . . . . . . . . . . . . .  14
  4733.         /X -- immediate mode (batch) . . . . . . . . . . . . . . .  43
  4734.      Comments
  4735.         Putting them back in, design difficulties surrounding  . .  23
  4736.         Suppression of . . . . . . . . . . . . . . . . . . . . . .  22
  4737.      Compuserve  . . . . . . . . . . . . . . . . . . . . .  47, 51, 52
  4738.      CONFIG.SNP  . . . . . . . . . . . . . . . . . . . . . . . . 9, 43
  4739.      Configuration file  . . . . . . . . . . . . . . . . 9, 10, 40, 43
  4740.         CONFIG.SNP . . . . . . . . . . . . . . . . . . . . . . . 9, 43
  4741.         Retrieving configuration settings  . . . . . . . . . . . .  10
  4742.         Saving configuration settings  . . . . . . . . . . . . . .  10
  4743.      Continuation lines  . . . . . . . . . . . . . . . . . . . . .  47
  4744.      Control structure . . . . . . . . . . . . . 6, 20, 38, 40, 45, 49
  4745.      Cross-reference . 4, 5, 8, 10, 17, 18, 23, 26, 32-35, 40, 46, 50,
  4746.                                                                 58, 74
  4747.         Key words  . . . . . . . . . . . . . . . . . . . . . .  23, 33
  4748.         Legend . . . . . . . . . . . . . . . . . . . . . . . . . .  32
  4749.         Limitation of type flagging  . . . . . . . . . . . . . . .  33
  4750.         Limiting to PUBLIC variables . . . . . . . . . . . . . . .  35
  4751.         Numeric constants  . . . . . . . . . . . . . . . . . . . .  32
  4752.         Quoted strings excluded from . . . . . . . . . . . . . . .  32
  4753.         What is included . . . . . . . . . . . . . . . . . . . . .  32
  4754.      Database summary  . . . . . . . . . . . . .  4, 26, 28-30, 50, 63
  4755.  
  4756.                                      78
  4757.  
  4758.  
  4759.  
  4760.  
  4761.  
  4762.  
  4763.  
  4764.      dBASE II  . . . . . . . . . . . . . . 1, 5, 7, 11, 24, 29, 30, 32
  4765.      dBASE III . . . . . . . . . .  1, 5, 8, 11, 24, 29-31, 34, 35, 50
  4766.      dBASE IV  . . . . . . . . . . . . 1, 5, 8, 11, 24, 28, 31, 35, 48
  4767.      DBXL  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
  4768.      DBxWORDS.SNP  . . . . . . . . . . . . . . . . . . . . . .  21, 35
  4769.         DB2WORDS.SNP . . . . . . . . . . . . . . . . . . . . . . 7, 24
  4770.         DB3WORDS.SNP . . . . . . . . . . . . . . . . . . 8, 23, 24, 34
  4771.         DB4WORDS.SNP . . . . . . . . . . . . . . . . . . . . 8, 24, 49
  4772.      Documentation files
  4773.         Printing . . . . . . . . . . . . . . . . . . . . . . . . .  12
  4774.      Elapsed time  . . . . . . . . . . . . . . . . . . . . . . . .  10
  4775.      errors  . . . . . . . . . . . . . . . . 6, 11, 20, 38, 43, 46, 58
  4776.         ERROR.DOC  . . . . . . . . . . . . . . . . . . . . . .  11, 58
  4777.      Field names . . . . . . . . . . . . . . . . . . . . 21, 32, 61-63
  4778.      Format files  . . . . . 4, 10, 11, 15, 17, 19, 27, 30, 37, 57, 58
  4779.      Format screen . . . . . . . . . . . . . . .  8, 20-22, 24, 38, 40
  4780.      FoxBASE . . . . . . . . . . .  1, 5, 7, 8, 11, 24, 29, 30, 35, 50
  4781.         Index files  . . . . . . . . . . . . . . . . . . .  11, 29, 42
  4782.      FoxPro  . .  1, 4, 5, 8, 9, 11, 15-17, 24, 29, 31, 35, 45, 48, 70
  4783.      Functions
  4784.         Capitalization of function names . . . . . . . . . . .  23, 34
  4785.      Indentation . . . . . . . . . . . . . . 5, 10, 17, 18, 20, 21, 50
  4786.         Alternate CASE indenting . . . . . . . . . . . . . . . . .  21
  4787.      Index file  . . . 4, 11, 19, 28-30, 37, 48, 57, 61, 62, 65-67, 77
  4788.         NDX extensions . . . . . .  29, 30, 42, 50, 57, 62, 65, 66, 77
  4789.      Input . . . . . . . . . . . . . . . . . . . 9, 11, 19, 32, 40, 43
  4790.      Key words . . . . . . . . . . 7, 8, 10, 18, 21-24, 32, 34, 38, 45
  4791.         Capitalization . . . . .  5, 10, 18, 21-23, 34, 35, 39, 48, 50
  4792.         Cross-referencing of . . . . . . . . . . . . . . . . .  23, 32
  4793.         DBxWORDS.SNP . . . . . . . . . .  7, 8, 21, 23, 24, 34, 35, 49
  4794.         Duplicates . . . . . . . . . . . . . . . . . . . . . . . .  24
  4795.         Expansion or compression . . . . . . . . . . . . . . . . .  22
  4796.         Including other files  . . . . . . . . . . . . . . . . . .  24
  4797.         PERSONAL.KEY . . . . . . . . . . . . . . . . . . . . .  24, 49
  4798.         Peverse use of, punishment for . . . . . . . . . . . . . .  10
  4799.         Special characters in file . . . . . . . . . . . . . . . .  23
  4800.      Korenthal Associates  . . . . . . . . . . . . . . . . . .  12, 13
  4801.      Label forms . . . . . . . . . . . . . . 11, 17, 19, 26-28, 50, 57
  4802.      License agreement . . . . . . . . . . . . . . . . . . . . . . . 1
  4803.      Limitations . . . . . . . . . . . . . . . . . . . . . . . . .  45
  4804.      Link  . . . . . . . . . . . . . . . . . . . . . . . 4, 35, 36, 50
  4805.         LINK.SNP . . . . . . . . . . . . . . . . . . . . . . . . .  35
  4806.         PLINK86  . . . . . . . . . . . . . . . . . . . . . . 4, 35, 50
  4807.      MACRO.SNP . . . . . . . . . . . . . . . . . . . . . . . . . .  14
  4808.      Macros  . . . 5, 9, 14-17, 19, 28, 33, 37, 43, 50, 66, 72, 74, 76
  4809.         SNAPMACRO  . . . . . . . . . . . . . . . . . . . . . .  14, 20
  4810.      Make
  4811.         Make files . .  4, 5, 7, 8, 11, 19, 20, 22, 35, 36, 45, 50, 52
  4812.         MAKE.INI . . . . . . . . . . . . . . . . . . . . . . . . .  36
  4813.         MAKEFILE . . . . . . . . . . . . . . . . . . . . . . .  36, 58
  4814.         NDMAKE . . . . . . . . . . . . . . . . . . . . . . . . . .  36
  4815.      Memory files  .  4, 9, 11, 15, 17, 19, 26, 27, 31, 37, 55, 58, 77
  4816.  
  4817.                                      79
  4818.  
  4819.  
  4820.  
  4821.  
  4822.  
  4823.  
  4824.  
  4825.      Memory requirements . . . . . . . . . . . . . . . . . . . . .  45
  4826.      Nantucket . . . . . . . . . . . . . . . . . . . . . . . . . 1, 51
  4827.      Narratives  . . . . . . . . . . . . . . . . . . . . . . . . .  48
  4828.      NDMAKE  . . . . . . . . . . . . . . . . . . . . . . . . . . .  36
  4829.      Other screen  . . . . . . . . . . . . . . . . . . . . . . . .  11
  4830.      Output  4, 7-9, 12, 19, 22, 23, 34, 36, 37, 39, 42, 47, 48, 50, 54
  4831.      Paths . . . . . . . . . . . . . . . . 7-9, 11, 12, 15, 37, 45, 47
  4832.      PERSONAL.KEY  . . . . . . . . . . . . . . . . . . . . . .  24, 49
  4833.      PLINK86 . . . . . . . . . . . . . . . . . . . . . . . . 4, 35, 50
  4834.         LINK.SNP . . . . . . . . . . . . . . . . . . . . . . . . .  35
  4835.      Print screen  . . . . . . . . . . . . . . . . . . . . . . . .  42
  4836.         HP LaserJet II setup string  . . . . . . . . . . . . . . .  41
  4837.      Printer configuration file  . . . . . . . . . . . . . . . . .  26
  4838.      Printing documentation  . . . . . . . . . . . . . . . . . . .  12
  4839.         4PRINT . . . . . . . . . . . . . . . . . . . . . . . . . .  12
  4840.         Norton Utilities LP Program  . . . . . . . . . . . . . . .  12
  4841.         Reprinting . . . . . . . . . . . . . . . . . . . .  13, 42, 49
  4842.      PRIVATE variables . . . . . . . . . . . . . . . .  33, 35, 74, 75
  4843.      Procedure files
  4844.         Unique name requirement  . . . . . . . . . . . . . . . . .  46
  4845.      ProClip . . . . . . . . . . . . . . . . . . . . . . . . . . .  24
  4846.      Program narratives  . . . . . . . . . . . . . . . . . . . . .  48
  4847.      PUBLIC variables  . . . . . .  18, 32, 33, 35, 50, 53, 55, 74, 75
  4848.      Quicksilver . . . . . . . . . . . . . . . . . . . . . . . . 6, 11
  4849.      Recursion (see Recursion) . . . . . . . . . . . . . . . . . .  27
  4850.      Registration Fee  . . . . . . . . . . . . . . . . . . . . . . . 6
  4851.      Report forms  . 4, 10, 11, 17, 19, 26-28, 31, 37, 57, 58, 61, 62,
  4852.                                                                 68, 77
  4853.      Rettig, Tom . . . . . . . . . . . . . . . . . . .  18, 22, 24, 34
  4854.      SNAP FORMAT . . . . . . . . . . . . . . . . . . . . . . . . .  18
  4855.      SNAP XREF . . . . . . . . . . . . . . . . . . . . . . . . . .  18
  4856.      SNAP.DOC  . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
  4857.      SNAP.EXE  . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
  4858.      SNAP.HLP  . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
  4859.      SNAP! directives
  4860.         Changing *#  . . . . . . . . . . . . . . . . . . . . . . .  14
  4861.         DATAPATH . . . . . . . . . . . . . . . . . . . . . . . . .  17
  4862.         FORMAT . . . . . . . . . . . . . . . . . . . . . . . . . .  18
  4863.         FORMFEED . . . . . . . . . . . . . . . . . . . . . . . . .  41
  4864.         PRGPATH  . . . . . . . . . . . . . . . . . . . . . . . . .  17
  4865.         SNAPCODE . . . . . . . . . . . . . . . . . . . . . . 15-18, 29
  4866.         SNAPMACRO  . . . . . . . . . . . . . . . . . 14-16, 18, 28, 55
  4867.         XREF . . . . . . . . . . . . . . . . . . . . . . . . . . .  18
  4868.      SNAPMACRO . . . . . . . . . . . . . . . . . . . . . . . .  14, 20
  4869.      Source code printout  . . . . . . . . . . . . . . . . . . . .  40
  4870.         Alternatives to SNAP!  . . . . . . . . . . . . . . . . . .  12
  4871.         Directing to a file or another port  . . . . . . . . . . .  42
  4872.         Forcing page breaks  . . . . . . . . . . . . . . . . . . .  41
  4873.         Network printing considerations  . . . . . . . . . . . . .  42
  4874.         Printing without documenting . . . . . . . . . . . . . . .  42
  4875.         What files are not printed . . . . . . . . . . . . . . . .  42
  4876.      Support, how to get . . . . . . . . . . . . . . . . . . . . .  51
  4877.  
  4878.                                      80
  4879.  
  4880.  
  4881.  
  4882.  
  4883.  
  4884.  
  4885.  
  4886.      System screen . . . . . . . . . . . . . . . . . . . 7, 10, 15, 17
  4887.      Tabs  . . . . . . . . . . . . . . . . . . . . . .  10, 20, 40, 41
  4888.         Spaces instead of  . . . . . . . . . . . . . . . . . . . .  20
  4889.      TLINK . . . . . . . . . . . . . . . . . . . . . . . . . 4, 35, 50
  4890.      TopFile . . . . . . . . . . . . . . . 7-9, 11, 14, 31, 36, 44, 47
  4891.         Explanation of . . . . . . . . . . . . . . . . . . . . . . . 7
  4892.      Tree screen . . . . . . . . . . . . . . . . . . . . . . . . .  27
  4893.      Turbo Linker  . . . . . . . . . . . . . . . . . . . . . 4, 35, 50
  4894.      Turbo Pascal  . . . . . . . . . . . . . . . . . . . . . . . .  49
  4895.      Updates, how to get . . . . . . . . . . . . . . . . . . . . .  51
  4896.      Version Numbers . . . . . . . . . . . . . . . . . . . . . . .  51
  4897.  
  4898.  
  4899.  
  4900.  
  4901.  
  4902.  
  4903.  
  4904.  
  4905.  
  4906.  
  4907.  
  4908.  
  4909.  
  4910.  
  4911.  
  4912.  
  4913.  
  4914.  
  4915.  
  4916.  
  4917.  
  4918.  
  4919.  
  4920.  
  4921.  
  4922.  
  4923.  
  4924.  
  4925.  
  4926.  
  4927.  
  4928.  
  4929.  
  4930.  
  4931.  
  4932.  
  4933.  
  4934.  
  4935.  
  4936.  
  4937.  
  4938.  
  4939.                                      81
  4940.